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.
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)
| 归档时间: |
|
| 查看次数: |
771 次 |
| 最近记录: |