我有一個成員變量,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