如何从可变元组中获取元素
How do I get elements from a variadic tuple?
因此,我使用可变模板创建了一个简单的元组类…
我该如何去做一个工作get方法/助手函数?我使用的当前元组导致编译器期望在空元组中定义get。
代码如下:
template<typename... T>
class tuple;
template< >
class tuple< > { };
template<typename U, typename... T>
class tuple<U, T...>
{
public:
tuple () {};
tuple (U f, T... r);
U get (int idx, int numCalls = 0) const;
U first_;
tuple<T...> rest_;
};
template<typename U, typename... T>
tuple<U, T...>::tuple (U f, T... r)
{
first_ = f;
rest_ = tuple<T...> (r...);
}
template<typename U, typename... T>
U tuple<U, T...>::get (int idx, int numCalls) const
{
if (idx == numCalls)
return first_;
return rest_.get (idx, numCalls + 1);
}
谢谢你的帮助!
为一个类型和零类型添加专门化:
template <typename T>
class tuple
{
T first_;
// get() ...
}
注意你的设计是非常低效的。首先,get
索引实际上应该是一个编译时常量参数,所以您需要get<i>
(就像std::tuple
一样)。您的运行时代码不包含错误检查,并且在编译时无法捕获无效调用。其次,所有的构造函数都要执行大量的复制,这些复制可能需要修改以允许完美的转发。
要使当前代码正常工作,请在空元组中创建一个不返回任何值的get函数。
或者,一个更好的解决方案是使用您喜欢的参数数量的形参get:
template<typename U, int N>
U get()
,然后使其传递简化后的N,当N为0时,对其进行专门化以返回该元素。
相关文章:
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- 从 c++ 中的链表中获取元素
- CPtrList - 如何获取元素的索引?
- 编译按映射类型获取元素的映射错误元组
- 如何在列表中获取元素的所有组合
- 通过 std::queue 中的元素的值获取元素的索引
- 如何从circular_buffer获取元素
- 反转偏移量/按偏移量获取元素的名称
- 如何在 c++ 中搜索向量并获取元素的位置
- 如何在 n 元树中获取元素
- 如何从STL容器实例中获取元素类型
- 使用成员函数top()从priority_queue获取元素
- c ++中是否有任何方法可以在随机访问的列表中获取元素
- 如何在嵌套向量中获取元素类型
- 如何获取元素的数量
- 我看不到从 std::queue 中获取元素的方法
- 获取元素在boost::multi_index_container的顺序索引中的位置
- PugiXML C++获取元素(或标记)的内容
- 如何从传递给STL算法的谓词中获取元素的索引
- 有没有一种方法可以从传递给排序的lambda中获取元素位置