繁体   English   中英

如何为std :: tuple创建get()成员函数

[英]How to create a get() member function for a std::tuple

我的问题是std :: tuple没有像这样的成员函数

auto t = std::make_tuple(1,2,"foo");
t.get(1);

创建包装类arround std :: tuple时如何实现此类功能

这样的函数不存在(在当前的C ++标准中),因为函数参数是一种运行时机制,但是在编译时需要知道返回类型。 因此,后者不能依赖于前者。

使用std::get代替:

auto v = std::get<1>(someTuple);

要从元组获取值,您应该使用std::get<0>(tuple)

您无法拥有所需的get函数,因为元组元素不一定是同一类型(在您的示例中,您有ints和一个字符串)。 get函数的返回类型是什么?

您可以添加一个模板get函数,以便derived_tuple.get<0>()将返回第一个元素。

实际上,这里有两个问题。 首先是

为什么get具有模板整数参数,而不是接受此值作为函数参数。

已经回答了。

另一个问题是

为什么get是一个自由函数而不是成员函数

为此,答案似乎是-以便在模板化类型上调用时,不需要使用关键字typename 例。 假设元组有一个get作为成员,则必须像下面的代码中那样调用它:

template <class T> void foo(T tuple) {
    tuple.template get<1>() = 42;
}

这个template肯定是令人讨厌的。

暂无
暂无

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

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