我如何列出 - 初始化我自己的类?

时间:2016-03-13 02:40:27

标签: c++ c++11

我希望我自己的类可以像vector一样进行列表初始化:

myClass a = {1, 2, 3};

如何使用C ++ 11功能实现这一目标?

2 个答案:

答案 0 :(得分:9)

C ++ 11有一个初始化列表的概念。要使用它,请添加一个构造函数,该构造函数接受类型为std::initializer_list<T>的单个参数。例如:

#include <vector>
#include <initializer_list>
#include <iostream>
struct S
{
  std::vector<int> v_;
  S(std::initializer_list<int> l)
    : v_(l)
  {
    std::cout << "constructed with initializer list of length " << l.size();
  }
};

int main()
{
    S s = { 1, 2, 3 };
    return 0;
}

答案 1 :(得分:2)

initializer_list可以(像其他STL容器一样)迭代,可以查询size。这允许您按照yuyoyuppe的其他答案中的指示立即将其提供给vector。但是,您可能还有其他意图进行初始化,并执行类似于直接对列表项执行操作而不进行复制的操作。

#include <initializer_list>
#include <iostream>
#include <algorithm>

struct S
{
  int thesum;
  int items;
  S(std::initializer_list<int> l) :
    thesum(std::accumulate(l.begin(), l.end(), 0)),
    items(l.size())
  {}
};

int main()
{
    S s = { 1, 2, 3 };
    std::cout << s.items << std::endl;
    std::cout << s.thesum << std::endl;
    return 0;
}

打印

3
6

请参阅:

相关问题