如何根据类型生成指针向量?

时间:2014-12-12 18:21:21

标签: c++ c++11 variadic-templates

我尝试以下代码

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无法正常工作。如何解决?

1 个答案:

答案 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;
}