dae*_*lic 1 c++ tuples variadic-templates c++11
所以说我这样定义一个元组:
template<typename... Args>
class Tuple
{
Method () {...};
};
Run Code Online (Sandbox Code Playgroud)
我如何定义和访问元组的实例变量,因为它可能有一个未定义的数量?
有几种方法.最简单的方法是按照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实现方式.
| 归档时间: |
|
| 查看次数: |
3385 次 |
| 最近记录: |