我第一次尝试使用可变参数模板(使用 VS2012 + Nov. CTP)并遇到了编译器崩溃的问题。这是一个最小的例子:
class Foo
{
public:
Foo(int someVar) { }
Foo(int someVar, float someOtherVar) { }
};
template<typename ... FooArguments>
Foo* createFoo(FooArguments ... fooArguments)
{
return new Foo(1337, fooArguments ...);
}
int main()
{
delete createFoo(1338.0f); // Works
delete createFoo(); // Crashes compiler: error MSB6006: "CL.exe" exited with code -2147483645.
}
我想要做的是拥有不同Foo
的类,它们都具有相同的基类和构造函数的相同的第一个参数(此处int someVar
)。此外,它们可能具有添加其他参数的构造函数重载(此处float someOtherVar
)。它们都应该可以createFoo
通过不传递或传递任意数量的参数来构造。
我还尝试了不同的方法,例如使不带参数的重载createFoo
,但这显然会导致模棱两可的调用。
为什么编译器会崩溃?什么是正确的方法?