【发布时间】:2017-11-19 11:48:45
【问题描述】:
我有一个基类
template<class T>
class Base
{
public:
Base(T foo = T())
{
for(int i = 0; i < 10; i++)
foos.push_back(foo);
}
private:
std::vector<T> foos;
}
我有一个派生类
class Derived : public Base<Bar>
{
public:
Derived() : Base(Bar("somerandomparameter")) {}
}
我想要这样做,是使用提供的构造函数(不管它是什么)创建一个包含 10 个新 Bars 的向量。
我曾想过创建一个自定义复制构造函数,但这并没有按预期工作,因为 push_back 方法似乎创建了更多副本,至少我的 Bar 构造函数被调用了 10 次以上。
对我来说,最佳解决方案是传递参数列表,因为这只会创建我想要的 10 个对象。
...
Base(ParameterList l)
{
for(int i = 0; i < 10; i++)
foos.push_back(T(l));
}
...
但由于这是一个模板类,我需要该列表适应T 需要的任何类型或数量的参数。有没有办法做到这一点,或者你知道做我想做的更好的方法吗?
【问题讨论】:
-
C++11 接受variadic templates。您可以指定标准 c++
标签: c++ function parameters template-classes