所以说我这样定义一个元组:
template<typename... Args>
class Tuple
{
Method () {...};
};
考虑到 Tuple 的实例变量可以有未定义的数量,如何定义和访问实例变量?
所以说我这样定义一个元组:
template<typename... Args>
class Tuple
{
Method () {...};
};
考虑到 Tuple 的实例变量可以有未定义的数量,如何定义和访问实例变量?
有几种方法。最简单的方法是像 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
实现方式。
我认为最简单的方法是使用 boost 元组库 - 使用简单,经过良好测试和记录:
http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html