我试图在类模板的构造函数中初始化一个向量成员变量。我得到了"' T'不是指价值"来自编译器的错误,因为T指的是一个类,所以我不能用这种格式做我想做的事情。请问构造函数的正确格式是什么? (我猜我需要根据constructor将T转换为const val_type?)
template <class T>
class PeripheralSystem {
public:
PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T) {};
virtual ~PeripheralSystem();
private:
std::vector<T> peripherals;
};
答案 0 :(得分:3)
如果意图是vector
的初始大小为numPeripherals
元素,请使用
PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals) {};
现在peripherals
将numPeripherals
值初始化(如果T
是类类型的默认初始化)T
的实例。
答案 1 :(得分:2)
如果要使用默认值初始化所有元素,请使用以下格式:
PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T() ) {};
你可以省略那个参数,std::vector
构造函数将T()作为该参数的默认值,直到c ++ 11或者构造函数只接受大小:
// until c++11
explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());
// since c++11
vector( size_type count,
const T& value,
const Allocator& alloc = Allocator());
explicit vector( size_type count );
所述
答案 2 :(得分:1)
您似乎尝试使用vector<T>
类型的对象初始化T
,因此请使用以下内容:
PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T()) {};