【发布时间】:2015-05-06 03:44:19
【问题描述】:
最近我问了this 的问题,但现在我想扩展它。我写了以下课程:
template <class T>
class X{
public:
vector<T> v;
template <class T>
X(T n) {
v.push_back(n);
}
template <class T, class... T2>
X(T n, T2... rest) {
v.push_back(n);
X(rest...);
}
};
使用
创建对象时X<int> obj(1, 2, 3); // obj.v containts only 1
Vector 只包含第一个值,而不包含其他值。我检查并看到构造函数被调用了 3 次,所以我可能正在创建临时对象并用其余参数填充它们的向量。我该如何解决这个问题?
【问题讨论】:
-
为什么不只是
template <typename ...Args> X(Args ...args) : v({args...}) {}? -
您的类确实应该采用
std::initializer_list<T>参数,而不是使用可变参数模板构造函数。这是惯用的。 -
我是 C++11 的新手,所以还在学习。
标签: c++ c++11 variadic-templates