我的问题是std :: tuple没有像
这样的成员函数auto t = std::make_tuple(1,2,"foo");
t.get(1);
当我创建一个包装类arround std :: tuple
时,如何实现这样的功能答案 0 :(得分:3)
这样的函数不存在(在当前的C ++标准中),因为函数参数是运行时机制,但返回类型需要在编译时知道。所以后者不能依赖前者。
改为使用std::get
:
auto v = std::get<1>(someTuple);
答案 1 :(得分:0)
要从元组中获取值,您应该使用std::get<0>(tuple)
你不能拥有你想要的get
函数,因为元组元素不一定是同一类型(在你的例子中你有int和字符串)。这个get
函数的返回类型是什么?
您可以添加模板获取功能,以便derived_tuple.get<0>()
将返回第一个元素。
答案 2 :(得分:0)
这里实际上有两个问题。第一个是
为什么get有一个模板积分参数而不是接受它 value作为函数参数。
已经回答了这个问题。
另一个问题是
为什么get是一个自由函数而不是一个成员函数
对此答案似乎是 - 因此调用模板化类型,它不需要使用关键字typename
。例。假设,元组会有一个get作为成员,它必须在下面的代码中被调用:
template <class T> void foo(T tuple) {
tuple.template get<1>() = 42;
}
这template
肯定是一件令人讨厌的事。