【发布时间】:2015-08-26 18:48:22
【问题描述】:
给定可变参数模板数据结构如下(代码来自Eli Bendersky's website):
template <class... Ts> struct tuple {};
template <class T, class... Ts>
struct tuple<T, Ts...> : tuple<Ts...> {
tuple(T t, Ts... ts) : tuple<Ts...>(ts...), tail(t) {}
T tail;
};
我们可以定义类似的东西
tuple<double, uint64_t, const char*> t1(12.2, 42, "big");
那么如何定义一个可以接受以下签名的模板结构呢?
Foo<tuple<int,double>, tuple<double,int,long> ..., tuple<std::string>> foo;
我想应该是这样的:
template<tuple<class... Ts>... Tuples>
struct VariadicTuples {};
但它无法编译。是因为 Variadic 模板中的类不能是 Variadic 模板吗?如果是这样,如何使这项工作?
【问题讨论】:
-
在您使用
Foo的示例中,您不是传递模板本身,而是传递模板本身。template <class... Ts> struct Foo;足以编译。
标签: c++ templates c++11 metaprogramming