繁体   English   中英

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

[英]is it possible to set the default value of std::tr1::tuple?

(我使用的是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?

有人可以帮助我吗?

tuple不是结构的神奇替代品。 他们的目的有很大的不同。 首先,结构是一种语言结构。 tuple是一个构造。

结构具有默认值,因为该语言表示您可以编写构造函数以为其提供默认值。 然后,该语言负责调用该构造函数以初始化该结构。 作为结构的tuple不具备这种功能,而您可以给std::vector<T>一个默认的T ,它将始终自动使用它。 您可以为每个成员提供初始值,但不能为它提供defaults

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM