这个关于对象生成器模式的问题让我想到了使它自动化的方法。 本质上,我想自动创build像std::make_pair , std::bind1st和std::mem_fun这样的函数,以便不必为每个模板类types编写不同的函数,可以编写单个可变模板模板函数即时处理所有案件。 这个函数的用法如下: make<std::pair>(1, 2); // equivalent to std::make_pair(1, 2) make<std::binder2nd>(&foo, 3); // equivalent to std::bind2nd(&foo, 3); 可以写这个函数吗? 我已经尝试过,但是在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)' 我在这里的任何地方都有语法错误吗? 或者这是正确的,海湾合作委员会是错的? 或者,这只是在C ++ 0x从根本上不可能? [编辑] build议N2555似乎暗示这是允许的, […]