本质上,我想自动创建像std::make_pair
,这样的函数std::bind1st
,std::mem_fun
这样就不必为每个模板类类型编写不同的函数,您可以编写一个单一的可变参数模板模板函数来一次处理所有情况。此功能的用法如下:
make<std::pair>(1, 2); // equivalent to std::make_pair(1, 2)
make<std::binder2nd>(&foo, 3); // equivalent to std::bind2nd(&foo, 3);
可以写这个函数make
吗?我已经尝试过了,但它在 GCC 4.5 或 4.6 中不起作用:
template <template <typename...> class TemplateClass, typename... Args>
TemplateClass<Args...> make(Args&&... args)
{
return TemplateClass<Args...>(std::forward<Args>(args)...);
}
如果我尝试打电话(例如)make<std::pair>(1, 2)
我会得到
error: no matching function for call to 'make(int, int)'
我在这里的任何地方都有语法错误吗?
或者这是对的,而 GCC 是错的?
或者这在 C++0x 中根本不可能?
[编辑]
提案N2555似乎表明这是允许的,并且GCC 声称已在 GCC4.4 中实现了它。