我第一次尝试使用可变参数模板(使用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
传递no或任意数量的参数。
我还尝试了不同的apporaches,例如使createFoo
的重载不带参数,但这显然导致了一个模糊的调用。
为什么编译器会崩溃?什么是正确的方法呢?