小编Ass*_*ler的帖子

在C++中有没有办法创建"超私有"变量?

我有一个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,这个类就没用了.

c++ oop

26
推荐指数
4
解决办法
2223
查看次数

如何打印strearchble类型的boost :: variant?

我觉得我有一个严肃的'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)

我缺少一个更优雅的解决方案吗?谢谢.

编辑:问题解决了.请参阅第一个解决方案和我对此的评论.

c++ boost

6
推荐指数
1
解决办法
2446
查看次数

标签 统计

c++ ×2

boost ×1

oop ×1