【问题标题】:How to initialise vector member variable in constructor of class template如何在类模板的构造函数中初始化向量成员变量
【发布时间】:2014-06-24 18:00:15
【问题描述】:

我正在尝试在类模板的构造函数中初始化向量成员变量。我从编译器收到“'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;

    };

【问题讨论】:

  • 你到底想做什么?默认构造 numPeripherals 对象?
  • 如果我猜对了你想要做什么,只要从你的构造函数中删除 , T 就可以解决它。
  • @DrewDormann 不适用于 c++11
  • 是的,谢谢,构造一个包含 numPeripherals 个 T 类对象的向量。
  • @Slava 所以?还有一个只需要大小的构造函数。

标签: c++ templates vector constructor stl


【解决方案1】:

如果意图是让vector 具有numPeripherals 元素的初始大小,则使用

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

现在peripherals 将具有numPeripherals 的值初始化(如果T 是类类型,则这是默认初始化)T 的实例。

【讨论】:

    【解决方案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所述

    【讨论】:

      【解决方案3】:

      看起来您正在尝试使用 T 类型的对象初始化 vector&lt;T&gt;,因此请使用以下内容:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2018-11-23
        相关资源
        最近更新 更多