如何在类模板的构造函数中初始化vector成员变量

时间:2014-06-24 18:00:15

标签: c++ templates vector constructor stl

我试图在类模板的构造函数中初始化一个向量成员变量。我得到了"' 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;

    };

3 个答案:

答案 0 :(得分:3)

如果意图是vector的初始大小为numPeripherals元素,请使用

PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals) {};

现在peripheralsnumPeripherals值初始化(如果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 );

http://en.cppreference.com/w/cpp/container/vector/vector

所述

答案 2 :(得分:1)

您似乎尝试使用vector<T>类型的对象初始化T,因此请使用以下内容:

PeripheralSystem(uint32_t numPeripherals = 0) : peripherals(numPeripherals, T()) {};