0

我第一次尝试使用可变参数模板(使用 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,但这显然会导致模棱两可的调用。

为什么编译器会崩溃?什么是正确的方法?

4

0 回答 0