gpt4 book ai didi

c++ - 是否可以为const操作指定一个private成员变量public?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:31 24 4
gpt4 key购买 nike

我有一个成员变量 enabled_m,它的值取决于许多变量。由于这些不变量应该由类维护,我希望它是private:

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 操作,所有操作都无需要求用户执行访问器例程?

最佳答案

大多数工程师会更喜欢您使用访问器方法,但如果您真的想要一个 hack-around,您可以这样做:

class AccessControl
{
private:
int dontModifyMeBro;
public:
const int& rDontModifyMeBro;
AccessControl(int theInt): dontModifyMeBro(theInt), rDontModifyMeBro(dontModifyMeBro)
{}

// The default copy constructor would give a reference to the wrong variable.
// Either delete it, or provide a correct version.
AccessControl(AccessControl const & other):
dontModifyMeBro(other.rDontModifyMeBro),
rDontModifyMeBro(dontModifyMeBro)
{}

// The reference member deletes the default assignment operator.
// Either leave it deleted, or provide a correct version.
AccessControl & operator=(AccessControl const & other) {
dontModifyMeBro = other.dontModifyMeBro;
}
};

关于c++ - 是否可以为const操作指定一个private成员变量public?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26680065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com