c++ - 配对可变参数模板(命名元组)

标签 c++ templates

我想为标记/命名元组创建一个模板类,因为每种类型的元组都与静态 std::string 相关联。

当创建一个新的标签元组时,我想通过以下方式调用它:

auto a = std::labeled_tuple<"key1", int, "key2", double>()

字符串的数量必须与提供的类型数量相匹配,显然长度是可变的。

从语法上讲,以下内容不正确,但它应该进一步阐明我想要的内容:

template<typename...template<std::string STR, typename Arg> T>

我想访问 STR... 和 T...

如有任何帮助,我们将不胜感激。

最佳答案

而是创建“标记”类型:

template <const char* Name, typename T>
struct labeled_type
{
     static constexpr const char* name = Name;
     T value;
};

然后使用常规 std::tuple:

static constexpr const char key1[] = "key1";
static constexpr const char key2[] = "key2";

auto a = std::tuple<labeled_type<key1, int>, labeled_type<key2, double>>();

Demo

关于c++ - 配对可变参数模板(命名元组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54711431/

相关文章:

c++ - 有没有办法将 cpp 11 中的别名 std::make_pair 函数键入到 abc::make_pair?

c++ - 堆栈分配的对象在超出范围后仍然占用内存?

c++ - 指针作为模板参数 - 如何在模板内声明指向 const 的指针

c++ - std::functions 的复合模式

c++ - 具有特定类型作为泛型参数的 STL 容器

c++ - 错误 C3017 : termination test in OpenMP 'for' statement has improper form

c++ - 在小部件和向导页面之间共享数据

c++ - 明确选择应该使用哪个模板重载

c++ - 使用模板的子类实例化模板

c++ - 大括号括起来的初始值设定项列表的无效使用