如果以前曾经问过这个问题我很道歉 - 没有明确的答案进行搜索,我开始怀疑它是否有可能。我正在尝试学习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 ++,我会道歉。在阅读了有关C ++ 11功能的内容之后,我才开始关注这个问题。
编辑:只是添加我在GCC 4.8.x和/或Visual Studio 2012上
答案 0 :(得分: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)...) {}
};
如果您要求更具体的内容,则必须更详细地描述它。