1

(我正在使用 Visual C++ 2010)假设我已经定义了一个像这样的元组:

typedef std::tr1::tuple<
int      //i want to set its default value to 9
, double //i want to set its default value to 3.3
, int    //i want to set its default value to 2
, double //i want to set its default value to -7.2
> Mytuple; 

我可以在结构中做到这一点。但我想知道是否可以在std::tr1::tuple.
此外,我想知道我应该什么时候使用std::tr1:tuplestruct?

任何人都可以帮助我吗?

4

1 回答 1

5

Atuple不是结构的神奇替代品。他们的目的非常不同。结构首先是一种语言结构。Atuple是一个结构。

结构有默认值是因为语言说你可以编写构造函数来给它们默认值。然后该语言负责调用该构造函数来初始化该结构。tuple,作为一个结构,没有这样的能力,就像你可以给它一个总是自动使用std::vector<T>的默认值一样。T您可以为每个成员提供初始值,但不能给它defaults

如果你考虑一下,你不会想要的。想象一下,如果有人可以说 everytuple<int, float>总是用 3 和 54.221 创建的即使其他一些代码创建了对这个规则一无所知的代码,也必须遵循它,(就像在使用该类型的任何地方都使用该类型的构造函数一样)。请记住:每个tuple<int, float>都是相同的类型。

实际上,atuple可以替代无法对结构执行反射并对其成员进行编译时迭代。它们存在的另一个主要原因是能够具有编译时动态结构(即,能够基于编译时参数创建类型聚合,而不是直接写入文件的静态列表)。

因此,除非您需要使用std::tie(为了有效地返回多个值)、迭代成员(即:为对象的每个成员调用一些模板函数)或一些类似的专用代码,否则您应该使用结构。

于 2012-11-09T05:36:39.637 回答