我正在制作自己的课程,我希望能够像标题一样对其进行初始化。
a = {x, y};
我一直找不到任何东西来指导我如何做到这一点。
假设您实际上希望能够以这种方式分配(而不是初始化),您需要重载operator=
,但它的参数类型完全取决于大括号内的列表所代表的内容。
例如,如果你总是要传递一对值,那么你可以有一个operator=
需要 a 的重载std::pair
:
A& operator=(std::pair<int, int>);
这可以像这样调用:
A a;
a = {5, 3};
如果您希望能够传递任意长度的列表,则可以将参数类型设置为std::initializer_list
:
A& operator=(std::initializer_list<int>);
现在以下所有内容都可以:
a = {};
a = {1, 2};
a = {5, 3, 5, 2, 3};
从 C++11 开始,您可以通过使用std::initializer_list模板类作为参数创建一个构造函数来做到这一点,并且您可以以类似的方式重载operator=。不过,我不知道 C++03 或 C++98 中有什么技巧可以做到这一点。
来自维基百科的Copypasta:
class SequenceClass {
public:
SequenceClass(std::initializer_list<int> list);
};