c++ - 从另一个模板引用可变模板参数包

标签 c++ templates c++14 variadic-templates

我有一个定义类型集合的可变参数模板类

template <typename ... Types> class TypePack { };

多次实例化

typedef TypePack<T1, T2, T3> Pack1;
typedef TypePack<T1, T2, T4> Pack2;

我想从其他模板中引用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;

上面的代码显然是错误的,无法编译。它只是说明我想要实现的目标。

我可以通过宏定义 Pack1Pack2,但我感觉应该可以在 C++14 中使用可变参数模板来实现

最佳答案

您正在寻找的是部分特化:

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;

关于c++ - 从另一个模板引用可变模板参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374759/

相关文章:

c++ - 如何在 noexcept 运算符中引用移动构造函数

c++ - 带 CMake 的 Qt5 - AUTOMOC 开启时 vtable 错误

c++ - 为模板类创建 gtest 值参数化测试

c++ - 扩展模板化类以在 object<bool> 实例上使用 operator bool

c++ - 对 avr 端口地址的 constexpr 引用

c++ - 本地声明的对象的内部内存在范围外完好无损?

c++ - 向 API 结构添加模板参数并保持与部分特化的向后兼容性

c++ - 用内存地址声明函数

c++ - 对数时间聚合的数量

Scala 中的 C++ 风格私有(private)访问?