如何列出初始化我自己的类
how can I list-initialize my own class?
我希望我自己的类可以像向量一样进行列表初始化:
myClass a = {1, 2, 3};
如何使用 C++11 功能执行此操作?
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;
}
可以
迭代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
看:
- http://www.cplusplus.com/reference/initializer_list/initializer_list/?kw=initializer_list
- http://en.cppreference.com/w/cpp/utility/initializer_list -
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 将矩阵乘以我自己的输入的向量
- 如何正确包含我自己的标头?
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- 为什么__builtin_popcount比我自己的比特计数功能慢?
- 在C++中,我可以在定义自己的复制构造函数后跳过定义赋值运算符吗?
- 在wxWidgets的事件中包含我自己的数据的最佳方法是什么?
- 如何在我自己的staticLib中使用staticLib
- 在我自己的堆栈中实现top的问题
- 尝试检查输入的文本与我自己的自定义答案
- 我应该在服务模板中的什么位置添加自己的代码?
- 如何在我自己的类中重载"+"和"<<"运算符
- 我正在尝试在视觉工作室上创建自己的库/源函数
- C++:我自己类的动态数组
- 如何在 C++ 中使用我自己的类中的库?
- 如何链接我自己的 .so 文件而不是操作系统捆绑包 .so 文件?
- 如何构建默认使用我自己的构建libc ++的clang?
- 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅地
- 分发我自己的程序的几个问题
- 如何自己为我自己的shared_ptr实现实现别名构造函数