我正在使用可变参数模板在C++ 11中创建一个元组类.我如何使用其实例变量?

dae*_*lic 1 c++ tuples variadic-templates c++11

所以说我这样定义一个元组:

template<typename... Args>
class Tuple 
{
    Method () {...};
};
Run Code Online (Sandbox Code Playgroud)

我如何定义和访问元组的实例变量,因为它可能有一个未定义的数量?

Joh*_*esD 9

有几种方法.最简单的方法是按照LISP的方式使用结构递归:元组是其中之一

  • 一个空的元组,或者
  • 一对(head, tail),其中head是元组的第一个元素和tail是包含元件的其余部分的元组.

在C++中,这将如下所示:

template <typename... Elems>
struct tuple; // undefined

template <>
struct tuple<> { }; // empty tuple

template <typename Head, typename... Tail>
struct tuple<Head, Tail...> {
    Head first_elem;
    tuple<Tail...> rest;
};
Run Code Online (Sandbox Code Playgroud)

然后你需要一个get<n>函数模板来实际按索引访问元素; 如果你了解如何递归定义元组本身,它应该很容易实现.

正如我所说,还有其他更棘手的实现方法 - 由于各种原因,上述并不是大多数现实世界的std::tuple实现方式.

  • 实际上,*是*他们是如何做到的.但是,对于空基础优化,非静态成员可以由基类子对象替换. (2认同)