我有一个成员变量,enabled_m
,它的值取决于许多变量。由于这些不变量应当由类保持下去,我希望它是private
:是否可以指定仅用于const操作的公共成员变量public?
class foo_t
{
public:
void set_this(...); // may affect enabled_m
void set_that(...); // may affect enabled_m
void set_the_other_thing(...); // may affect enabled_m
bool is_enabled() const { return enabled_m; }
private:
bool enabled_m;
};
其中一期工程,但实际上我的意图是要求的foo_t
用户通过类去修改enabled_m
。如果用户希望只阅读enabled_m
,这应该是允许的操作:
bool my_enabled = foo.enabled_m; // OK
foo.enabled_m = my_enabled; // Error: enabled_m is private
有没有一种方法,使enabled_m
public
为const
操作和private
用于非const
运营,而不必要求用户通过访问器例程?
使用getter函数有什么问题?如果你关心的是效率问题,那么返回'const bool&'的'inline'函数可能会编译成与直接成员访问相同的内容。 – dlf 2014-10-31 17:15:53
你或许可以创建一些代理对象,指向你的“真正的”布尔 - 但它真的值得吗?吸气剂是最流行和最干净的解决方案。 – 2014-10-31 17:17:26
除了@ dlf的担忧之外,我认为即使可以这样做,界面二元性也会让事情变得混乱。 – Borgleader 2014-10-31 17:17:40