我尝试以下代码
template<class B, class... Ds>
std::vector<std::shared_ptr<B>>& instances()
{
static std::vector<std::shared_ptr<B>> a = { std::shared_ptr<B>(new Ds)... };
return a;
}
但VS2013拒绝编译它(编译器已停止工作)。任何错误或如何正确地做到这一点?
[更多]请按照Ds...
进行测试,例如
instances<int>();
VS2013无法正常工作。如何解决?
答案 0 :(得分:1)
我使用VS2013 Update 4尝试了以下代码。它已编译并运行正常。
// VariadicTest1.cpp : Defines the entry point for the console application.
#include <vector>
#include <memory>
template<class B, class... Ds>
std::vector<std::shared_ptr<B>> & instances()
{
static std::vector<std::shared_ptr<B>> a{ std::shared_ptr<B>(new Ds)... };
return a;
}
class Base
{};
class Derived1 : public Base
{};
class Derived2 : public Base
{};
int main()
{
std::vector<std::shared_ptr<Base>> sp = instances<Base, Derived1, Derived2>();
return 0;
}