我有一个C++功能的想法,我想知道是否可以创建.
假设我希望'MyClass'中的私有变量只能由两个函数访问,即公共getter和setter.也就是说,如果MyClass的另一个公共或私有函数试图获取或更改我的超私有变量的值,我将得到编译错误.但是,getter和setter表现正常.
有任何想法吗?
编辑1:用例是让getter/setter执行错误检查或其他形式的逻辑.我甚至不希望类本身直接触及变量.
编辑2:这样的话:
template <class T>
class State{
private:
T state;
public:
State()
{
state = 0;
}
T getState()
{
return state;
}
void setState(T state)
{
this->state = state;
}
};
Run Code Online (Sandbox Code Playgroud)
然后任何类都可以继承它并仅通过getter/setter访问'state'.当然,如果没有根据你想要的逻辑修改getter和setter,这个类就没用了.
我觉得我有一个严肃的'Doh!' 这一刻......
我目前正在尝试实施:
std::ostream& operator<<(std::ostream &out, const MyType &type)
Run Code Online (Sandbox Code Playgroud)
MyType持有int :: char和bool的boost ::变体.IE:让我的变体流畅.
我试过这样做:
out << boost::apply_visitor(MyTypePrintVisitor(), type);
return out;
Run Code Online (Sandbox Code Playgroud)
MyTypePrintVisitor有一个模板化函数,它使用boost :: lexical_cast将int,char或bool转换为字符串.
但是,这不会编译,因为apply_visitor不是MyType的函数.
然后我这样做了:
if(type.variant.type() == int)
out << boost::get<int> (type.variant);
// So on for char and bool
...
Run Code Online (Sandbox Code Playgroud)
我缺少一个更优雅的解决方案吗?谢谢.
编辑:问题解决了.请参阅第一个解决方案和我对此的评论.