【问题标题】:What operator to overload if i want to use " a = {x, y};"如果我想使用“a = {x, y};”,要重载什么运算符
【发布时间】:2013-05-03 11:30:05
【问题描述】:

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

a = {x, y};

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

【问题讨论】:

  • 初始化它,还是赋值给它?另外,你打算以什么方式使用列表中的元素?
  • 你试过这样做吗?它会起作用的。
  • @0x499602D2:如果你的编译器支持 C++11 风格的大括号初始化器,并且类型适合这样的赋值,它会起作用。
  • xy 是同一类型吗?
  • 是的。 A 看起来像这样: class a { int x, y; }

标签: c++ overloading operator-keyword


【解决方案1】:

假设您确实希望能够以这种方式分配(而不是初始化),您需要重载 operator=,但它的参数类型完全取决于大括号内的列表所代表的内容。

例如,如果您总是要传递一对值,那么您可以有一个 operator= 重载,它采用 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};

【讨论】:

  • 我猜我想初始化它。我只是 SDL_Rect() 像这样: SDL_Rect rect = {x, y, w, h};这就是我想要做的,但我自己的班级中只有 x 和 y。
【解决方案2】:

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

来自维基百科的复制:

class SequenceClass {
public:
    SequenceClass(std::initializer_list<int> list);
};

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多