1

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

template<typename... Args>
class Tuple 
{
    Method () {...};
};

考虑到 Tuple 的实例变量可以有未定义的数量,如何定义和访问实例变量?

4

2 回答 2

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;
};

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

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

于 2011-11-19T00:25:45.773 回答
0

我认为最简单的方法是使用 boost 元组库 - 使用简单,经过良好测试和记录:

http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html

于 2011-11-19T00:31:42.103 回答