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

发布于 2024-12-17 01:57:28 字数 156 浏览 2 评论 0原文

假设我这样定义一个元组:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

盛夏尉蓝 2024-12-24 01:57:28

有几种方法。最简单的方法是像 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函数模板来实际按索引访问元素;如果您了解元组本身是如何递归定义的,那么实现起来应该相当容易。

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

There are a couple of ways. The easiest one is to use structural recursion the way LISP does: a tuple is either

  • an empty tuple, or
  • a pair (head, tail) where head is the first element of the tuple and tail is a tuple containing the rest of the elements.

In C++, this would look like the following:

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

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.

萌无敌 2024-12-24 01:57:28

我认为最简单的方法是使用 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文