1

我正在制作自己的课程,我希望能够像标题一样对其进行初始化。

a = {x, y};

我一直找不到任何东西来指导我如何做到这一点。

4

2 回答 2

5

假设您实际上希望能够以这种方式分配(而不是初始化),您需要重载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};
于 2013-05-03T11:38:28.763 回答
1

从 C++11 开始,您可以通过使用std::initializer_list模板类作为参数创建一个构造函数来做到这一点,并且您可以以类似的方式重载operator=。不过,我不知道 C++03 或 C++98 中有什么技巧可以做到这一点。

来自维基百科的Copypasta:

class SequenceClass {
public:
    SequenceClass(std::initializer_list<int> list);
};
于 2013-05-03T11:37:37.357 回答