Variadic模板和新的

7 c++ variadic-templates c++11

我有这个类模板:

template<class... T>
class Test {
  std::vector<TestCase*> test_cases;
public:
  Test() {
    // Here, for each T an instance should be added to test_cases.
    test_cases.push_back((new T)...);
  }
};
Run Code Online (Sandbox Code Playgroud)

这适用于一个模板参数,但对于多个参数,我收到此错误:

error: too many arguments to function call, expected 1, have 2
Run Code Online (Sandbox Code Playgroud)

如何以new这种方式使用可变参数模板?什么是正确的语法?


编辑:我认为我的问题不太清楚.我想要的是这个:

Test<TestCase1, TestCase2, TestCase3>;
// The constructor will then be:
test_cases.push_back(new TestCase1);
test_cases.push_back(new TestCase2);
test_cases.push_back(new TestCase3);
Run Code Online (Sandbox Code Playgroud)

我的编译器是用这个标志铿锵163.7.1 : -std=c++0x.

Mot*_*tti 3

vector::push_back需要一个参数,因此您无法在函数调用中扩展可变参数模板。此外,我还为基类(所有其他类派生自该基类)添加了一个模板参数。

这是编译的东西。

struct base{};
struct d0 : base{};
struct d1 : base{};
struct d2 : base{};

#include <vector>

// termination condition for helper function
template <class T>
void add(std::vector<T*>&) { 
}

// helper function
template <class T, class Head, class... Tail>
void add(std::vector<T*>& v) { 
       v.push_back(new Head()); 
       add<T, Tail...>(v);
}

template <class T, class ... U>
class test
{
    std::vector<T*> vec;
public:
    test() {
       add<T, U...>(vec);      
    }
};

int main() 
{
    test<base, d0,d1,d2> t;
}
Run Code Online (Sandbox Code Playgroud)