是否可以设置std :: tr1 :: tuple的默认值?

Tri*_*ant 1 c++ std visual-studio-2010 visual-c++ c++11

(我正在使用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; 
Run Code Online (Sandbox Code Playgroud)

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

有人可以帮帮我吗?

Nic*_*las 5

A tuple不是结构的神奇替代品.他们的目的非常不同.结构首先是语言结构.A tuple是一个构造.

结构具有默认值,因为语言表示您可以编写构造函数以赋予它们默认值.然后,语言负责调用该构造函数来初始化结构.tuple作为一个构造,它没有这样的功能,你可以给它std::vector<T>一个T永远自动使用的默认值.您可以为每个成员提供初始值,但不能为其提供默认值.

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

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

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

  • 分段构造是`元组'的另一个好用途. (2认同)