[英]Is it possible to override the default behavior of getting a struct member in C++?
类似于 python 中的@property
标签,我试图弄清楚是否可以在 C++ 中覆盖 getter 的行为而不必进行函数调用。
基本上,是否可以在 C++ 中执行以下操作:
class vector2(class):
def __init__(self):
self.values = [1,2]
@property
def x(self):
return self.values[0]
pos = vector2()
my_var = pos.x
是只编写 getter 和 setter 的最佳解决方案吗?
简短的回答是否定的,你不能那样做。
对于可以作为数组访问的二维向量,我会这样做:
struct Vec2 {
float x;
float y;
const float &operator[](const size_t i) const {
static_assert(sizeof(Vec2) == 2 * sizeof(float));
assert(i < 2);
return (&x)[i];
}
float &operator[](const size_t i) {
return const_cast<float &>(std::as_const(*this)[i]);
}
};
因此您可以直接访问成员变量或使用重载的下标运算符。
Vec2 v{4, 5};
v.x += 9;
v[1] = -3;
通常,显式调用 getter 和 setter。 我见过很多的命名约定是给 getter 和 setter 相同的名称。
class Foo {
public:
int member() const {
return hidden;
}
void member(const int value) {
hidden = value;
}
private:
int hidden;
};
这种命名约定使访问非常干净,但仍然清楚地表明正在发生函数调用。
Foo f;
f.member(5);
int five = f.member();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.