0

例如,我有以下代码:

#include <iostream>
#include <array>

class Base {
public:
  Base() : mA(std::array<int,2>()) {}
  Base(std::array<int,2> arr) : mA(arr) {}
  Base(/* what to write here ??? */);
private:
  std::array<int,2> mA;
};

int main() 
{
    std::array<int,2> a = {423, 12}; // Works fine
    Base b(a); // Works fine
    Base c({10, 20}); // This is what I need. 

    return 0;
}

我应该如何定义构造函数以允许初始化,如上面“main”中的第 3 行所示?一般来说,我需要一个可配置的(在编译/运行时长度)结构,它允许使用数字列表进行初始化,例如 {1, 2, 3} 或 (1, 2, 3) 或类似的东西,而不需要元素-逐元素复制。为简单起见,我选择了 std::array,但恐怕它可能不适用于这种初始化。你会推荐什么容器?

谢谢, 科斯蒂亚

4

1 回答 1

5

您可以添加一个构造函数,该构造函数接受一个std::initializer_list<int>并将内容复制到数组中:

#include <initializer_list>
#include <algorithm>

....

Base(std::initializer_list<int> a) {
   // check size first
   std::copy(a.begin(), a.end(), mA.begin()); }
}

注意:如果你想保存许多在运行时定义的元素,那么你应该使用一个std::vector<int>this 有一个构造函数 from ,initializer_list<int>这样代码就更简单了:

class Foo {
public:
  Foo() {}
  Foo(const std::vector<int>& arr) : mA(arr) {}
  Foo(std::initializer_list<int> a) : mA(a) {}
private:
  std::vector<int> mA;
};

您可以像这样初始化它:

Foo f1({1,2,3,4,5});

或者

Foo f2{1,2,3,4,5};
于 2012-11-07T09:12:14.123 回答