任何人都可以解释boost元组库的语法
Anyone can explain the syntax for the boost tuple library?
当我使用Boost.Tuple
时,我必须使用一些语法,如:
result.get<0>()
我觉得很不熟悉。通常<>
包含一个类型名,为什么它在这里使用int
?
他们使用语法result.get<0>()
的原因是元组的每个元素都可以有不同的类型,而这种语法是C++中让编译器对类型做正确事情的最简单方法。
如果函数只是普通的get(0)
,那么元组的所有元素都必须具有相同的类型,因为不可能有一个未模板化的get
函数返回几个不同的类型。
像result.get<int>(0)
这样的东西理论上可以工作,但它更详细,并引入了潜在的错误源——如果第0个元素根本不是int
呢?更糟糕的是,您只能在运行时发现这个错误。Boost中使用的语法简单明了——唯一可能把它搞砸的方法就是指定一个无效的索引,而这个索引可以在编译时被捕获。
<>
之间可以是类型。它也可以是整数。事实上,这可能是很多事情。模板参数可以是类型名,但也可以是编译时常数值。
这声明了一个采用以下类型的模板函数:
template<typename T> void foo();
这个需要一个编译时整数:
template<int I> void foo();
如果您熟悉Template MetaProgramming(TMP),这是一种非常熟悉的语法。但是,如果你不想进入编译时编程的黑魔法,那么你只需要担心模板参数是元组的索引
相关文章:
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 类内部和外部静态 constexpr 元组之间的差异
- 可变参数模板与使用元组在参数中添加不同的数据对
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- boost::包含提升单元的元组的哈希值
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 如何在可变参数模板函数中遍历可变参数元组?
- 任何人都可以解释boost元组库的语法
- 助推::精神::气.如何将内联语法分析器表达式转换为独立语法,以及如何解压缩它们生成的元组