c++ - 如何从可变元组中获取元素?

标签 c++ c++11 tuples variadic-templates

所以,我使用可变参数模板创建了一个简单的元组类...

我将如何着手制作一个有效的 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 index 实际上应该是一个编译时常量参数,所以你需要 get<i> (就像 std::tuple 一样)。您的运行时代码不包含错误检查,并且无法在编译时捕获无效调用。其次,您的所有构造函数都执行大量复制,可能应该对其进行修改以允许完美转发。

关于c++ - 如何从可变元组中获取元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206503/

相关文章:

c++ - 分别比较对的相等性、更小和更大。

php - 如何在 C++ 服务器中解码 curl url 编码的字符串

c++ - 使用 Clang 和 LLVM

c++ - 这是 gcc 的重载解析中的错误吗?

c++ - NULL 是否在 C++11 中定义为 nullptr?

c++ - 无需递归调用一个对象上每个元组元素的函数

c++ - 为什么我的 If-Else 永远不会评估为真?

c++ - initializer_list 不可变的性质导致过度复制

python 对元组列表进行排序

python - 按升序对元组列表进行排序