0

如果之前有人问过这个问题,我很抱歉 - 没有明确的答案进行搜索,我开始怀疑这是否可能。我正在尝试学习 C++11,但在使用可变参数模板时遇到了麻烦。我想我(最终)掌握了可变参数函数参数的概念,以及为什么/如何使用递归来解包和处理它们,但是在类构造函数中(我认为)类似的概念遇到了麻烦。

假设我想创建一个具有混合类型容器(假设元组)作为私有成员的可变参数模板类。构造类对象时,是否可以将任意数量的各种类型的对象推入该元组?就像是:

#include <tuple>

// forward declaration - is this needed?
template <class ... args>
class myClass;

template <class H, class ... T>
class myClass <H, T ...>
{
 private:
     std::tuple<anything can go here> mycontainer;
 public:
     myClass(const H& head, const T& ... tail)
     {
            push head into mycontainer;
            do some sort of recursion with tail;
     }
}

我一直在搞砸 std::tuple_cat 和 std::make_tuple 并认为我已经做了一段时间了,但没有运气。

自从我与 C++ 有任何关系以来已经有很长时间了,所以如果我完全疯了,我很抱歉。在阅读了一些有关 C++11 的特性之后,我才开始研究这个。

编辑:只需添加我在 GCC 4.8.x 和/或 Visual Studio 2012

4

1 回答 1

1

是的,可以从这些可变参数类型中构造一个成员。例如:

template <class ... T>
class myClass {
  std::tuple<T...> mytuple;
public:
  // Constructor that takes const refs to the Ts and constructs tuple:
  myclass(const T&... args) : mytuple(args...) {}

  // Perfect forwarding constructor that will try to construct tuple
  // from arbitrary lvalue/rvalue parameters:
  template <class... Args>
  myclass(Args&&... args) : mytuple(std::forward<Args>(args)...) {}
};

如果您要求更具体的内容,则必须更详细地描述它。

于 2013-07-19T02:40:50.610 回答