[英]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.