任何人都可以解释boost元组库的语法

Anyone can explain the syntax for the boost tuple library?

本文关键字:语法 元组 boost 都可以 解释 任何人      更新时间:2023-10-16

当我使用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),这是一种非常熟悉的语法。但是,如果你不想进入编译时编程的黑魔法,那么你只需要担心模板参数是元组的索引