如何将可变的std::元组作为模板参数
How can I take a variadic std::tuple as a template argument?
假设我有一个结构体
template <typename Args>
struct MyStruct
{
};
但是我只想用std::tuple
实例化这个类,例如
Mystruct<std::tuple<>> a; // OK
Mystruct<std::tuple<int, int, double>> a; // OK
Mystruct<double> a; // FAIL
我该怎么做?
这相当简单。声明但不定义通用模板:
template<typename T> struct Mystruct;
则定义专门化:
template<typename... Ts>
struct Mystruct<std::tuple<Ts...>>
{
// stuff
};
除了krzaq的答案之外,要获得更好的错误消息,您可能需要使用static_assert
// The traits:
template <typename T>
struct is_a_tuple : std::false_type {};
template <typename ... Ts>
struct is_a_tuple<std::tuple<Ts...>> : std::true_type {};
// Your structure (for error message)
template <typename T>
struct MyStruct
{
static_assert(is_a_tuple<T>::value, "T should be a std::tuple");
};
// Your structure (for std::tuple)
template <typename ... Ts>
struct MyStruct<std::tuple<Ts...>>
{
// Your implementation
};
相关文章:
- 将元组类型扩展为可变参数模板?
- 可变参数模板与使用元组在参数中添加不同的数据对
- 如何在可变参数模板函数中遍历可变参数元组?
- 创建派生自可变参数模板包的类型元组
- 如何在 c++ 中存储具有值的四个参数的元组
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 试图在C++14中将元组应用为参数
- 从函数的可变参数构建特定元组
- 将可变参数模板包装到元组向量
- 从函数返回元组时,将复制元组的参数,而不是移动元组参数
- 使用每种类型的可变参数模板上的类模板初始化元组
- C++ 从模板参数创建元组向量
- 如何从参数包构造引用的 std::元组?
- 有没有办法将一对元组剥离为可变参数模板类型或实例化具有可变参数类型的东西?
- 从可调用可变参数元组中的函数结果创建元组
- 返回元组的可变参数模板
- 当元组给出参数时,如何检查方法是否存在?
- 编译器对带有元组参数的函数的混淆
- 反转元组参数
- 转发元组参数到VS2012中的函数