我希望我自己的类可以像vector一样进行列表初始化:
myClass a = {1, 2, 3};
如何使用C ++ 11功能实现这一目标?
答案 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
请参阅: