Gho*_*der 1 c++ templates variadic-templates c++14
我有一个variadic模板类,用于定义类型集合
template <typename ... Types> class TypePack { };
Run Code Online (Sandbox Code Playgroud)
哪几次实例化
typedef TypePack<T1, T2, T3> Pack1;
typedef TypePack<T1, T2, T4> Pack2;
Run Code Online (Sandbox Code Playgroud)
我想引用TypePack其他模板中的参数
template <typename Pack> Client {
static constexpr std::array<Foo, sizeof...(Pack::Types)> foos {
make_foo<Pack::Types>()...
};
};
typedef Client<Pack1> Client1;
typedef Client<Pack2> Client2;
Run Code Online (Sandbox Code Playgroud)
上面的代码显然是错误的,不编译.它只是为了说明我想要实现的目标.
我可以定义Pack1并Pack2通过宏,但我觉得应该可以使用C++中的可变参数模板来实现它.
您正在寻找的是部分专业化:
template <typename Pack> struct Client;
template <class... Ts>
struct Client<TypePack<Ts...>>
{
static constexpr std::array<Foo, sizeof...(Ts)> foos {{
make_foo<Ts>()...
}};
};
// don't forget the definition
template <class... Ts>
constexpr std::array<Foo, sizeof...(Ts)> Client<TypePack<Ts...>>::foos;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |