【问题标题】:How to create an array constructor for my class?如何为我的类创建数组构造函数?
【发布时间】:2016-01-15 12:12:26
【问题描述】:

我想创建一个构造函数,类似于int数组构造函数:int foo[3] = { 4, 5, 6 };

但我想这样使用它:

MyClass<3> foo = { 4, 5, 6 };

我的班级中有一个私有的n 大小数组:

template<const int n=2>
class MyClass {

    public:

        // code...

    private:

        int numbers[n];

        // code...

};

【问题讨论】:

  • 尝试谷歌搜索c++11 initializer list
  • int[3] 类型不是类类型,所以它没有构造函数。它可以初始化,但不能通过构造函数调用。

标签: c++ arrays c++11


【解决方案1】:

您需要一个接受std::initializer_list 参数的构造函数:

MyClass(std::initializer_list<int> l)
{
    ...if l.size() != n throw / exit / assert etc....
    std::copy(l.begin(), l.end(), &numbers[0]);
}

TemplateRex 评论...

您可能需要警告such constructors are very greedy,这很容易导致不良行为。例如。 MyClass 不应让构造函数采用一对 ints。

...并且很紧张一个过度活跃的版主可能会删除它,所以这里是相对安全的。 :-)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多