lor*_*eld 5 c++ operator-overloading
我希望完成以下工作:
int x, y, z;
foo[x] = y; 表现得像 do_this(x,y);
z = foo[x]; 表现得像 z = do_that(x)
我可以实现第一与Foo类和Helper类,其中operator[]一个通过返回值Helper与构造类x,和operator=用于Helper类被定义为运行do_this(this->x, y)。像下面这样:
class Foo {
public:
Helper operator[](int x) {
return Helper(x);
}
};
class Helper {
public:
Helper(x) {
this->x = x;
}
void operator=(int y) {
do_this(this->x, y);
}
private:
int x;
};
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的是如何完成(2)。有没有办法重载 theoperator[]以便它知道它是在 lhs 还是 rhs 上使用的?
我不确定我是否理解您真正想要做什么,但您也许可以使用const的版本operator[]与非const版本。例如:
struct Foo {
Z operator [] (int x) const { // this last const is important
return do_that(x);
}
Helper operator [] (int x) {
// as you yourself have written.
}
};
Run Code Online (Sandbox Code Playgroud)
还有更多的提示和技巧,用于完美转发参数(又名“完美转发”)、“const 正确”,以及许多其他小事情,但其要点就是上面的内容。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |