【发布时间】:2011-02-26 12:27:34
【问题描述】:
我正在将一个结构体转换为一个类,这样我就可以为我的变量强制执行一个 setter 接口。
不过,我不想更改读取变量的所有实例。
所以我转换了这个:
struct foo_t {
int x;
float y;
};
到这里:
class foo_t {
int _x;
float _y;
public:
foot_t() : x(_x), y(_y) { set(0, 0.0); }
const int &x;
const float &y;
set(int x, float y) { _x = x; _y = y; }
};
我对此很感兴趣,因为它似乎模仿了 C# 的公共只读属性理念。
编译正常,我还没有看到任何问题。
除了在构造函数中关联 const 引用的样板之外,这种方法有什么缺点?
有什么奇怪的混叠问题吗?
为什么我以前没见过这个成语?
【问题讨论】:
-
为什么是 const int &x;常量浮动 &y;需要吗?
-
@ArunShaha 他在他的问题中解释了这一点。目的是为
x和y提供一个“访问器”,它与访问结构中的变量保持相同的语法。 -
C# 和 C++ 是完全不同的语言,有自己的风格和用法。将一种语言的样式复制到另一种语言会带来很多麻烦,学习新语言的最佳技术要简单得多,而不是复制可能不兼容的样式(例如 geter/seter 的可怕概念)
-
我应该澄清一点——“setter”只是为了强制类的所有内部状态同时更新,而不是因为我有获取/设置每个变量的冲动。在我的特殊情况下,我强制您同时更新时间戳和整数,并尝试通过界面使其显而易见。
-
虽然我很欣赏你的把戏,但保证以后会出现问题(正如尼尔在他的回答中指出的那样)。考虑使用 C++ 重构工具(我使用 Visual AssistX),它可以帮助您找到 x 和 y 的所有用法并用函数调用替换它们。
标签: c++ constants public accessor