我正在使用可变参数模板在 C++11 中创建一个元组类。我如何使用它的实例变量?
假设我这样定义一个元组:
template<typename... Args>
class Tuple
{
Method () {...};
};
考虑到元组可以有未定义的数量,如何定义和访问元组的实例变量?
So say I define a tuple as such:
template<typename... Args>
class Tuple
{
Method () {...};
};
How do I define and access the instance variables for Tuple considering it can have an undefined number of them?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有几种方法。最简单的方法是像 LISP 那样使用结构递归:元组要么是
(head, tail)
,其中head
是元组和tail
是包含其余元素的元组。在 C++ 中,这将如下所示:
然后您需要一个 get函数模板来实际按索引访问元素;如果您了解元组本身是如何递归定义的,那么实现起来应该相当容易。
正如我所说,还有其他更棘手的实现方法 - 由于各种原因,上述方法并不是大多数现实世界的 std::tuple 实现的方式。
There are a couple of ways. The easiest one is to use structural recursion the way LISP does: a tuple is either
(head, tail)
wherehead
is the first element of the tuple andtail
is a tuple containing the rest of the elements.In C++, this would look like the following:
Then you need a
get<n>
function template to actually access the elements by index; it should be rather easy to implement if you grok how the tuple itself is recursively defined.As I said, there are other, trickier, implementation methods - for various reasons the above is not how most real-world
std::tuple
implementations do it.我认为最简单的方法是使用 boost 元组库 - 使用简单,经过充分测试和记录:
http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html
I think the easiest way is to use boost tuple library - simple to use, well tested and documented:
http://www.boost.org/doc/libs/1_48_0/libs/tuple/doc/tuple_users_guide.html