以下のクラスでメソッドチェーンを行いたいですPoint
。
#include <iostream>
class Point {
public:
Point(int x, int y): _x(x), _y(y) {}
Point& moveX(int x);
Point& moveY(int y);
Point& print() const;
...
};
...
Point& Point::print() const {
std::cout << "(" << _x << "," << _y << ")" << std::endl;
return *this; // Compile fails
}
内部メンバーを出力するだけなので、メンバー関数print()
としてマークするのは理にかなっていると思います。const
ただし、以下のように、非 const 関数と const 関数の両方でメソッド チェーンを実行したいと考えています。
int main() {
Point p(1,1);
p.moveX(10).print().moveY(11); // method chaining
}
したがってthis
、非 const として返さなければなりませんが、コンパイルに失敗します。これは、私の理解では、メンバーがconst メンバー関数にconst
含まれているとマークされているためです。this
この状況でメソッドチェーンを行う方法はありますか?