有没有办法让一个公共成员,从类外部无法修改,没有访问器包装函数?

rub*_*nvb 6 c++ c++17

据我所知,这似乎是不可能的直接方式.使const成员使每个人都成为const.我想有一个只读属性,但我想避免典型的"getter".我喜欢const public,mutable private.这在C++中是否可行?目前,我能想到的只是一些模板和技巧friend.我正在调查这个.

可能看起来像一个愚蠢的问题,但我之前对这里的答案感到惊讶.

sky*_*ack 3

一种可能的解决方案可以基于一个内部类,外部类是该内部类的友元,如下所示:

struct S {
    template<typename T>
    class Prop {
        friend struct S;
        T t;
        void operator=(T val) { t = val; }
    public:
        operator const T &() const { return t; }
    };

    void f() {
        prop = 42;
    }

    Prop<int> prop;
};

int main() {
    S s;
    int i = s.prop;
    //s.prop = 0;
    s.f();
    return i, 0;
}
Run Code Online (Sandbox Code Playgroud)

如示例所示,类S可以从其成员函数中修改属性(请参阅 参考资料S::f)。另一方面,该属性不能以任何其他方式修改,但仍然可以通过返回对实际变量的 const 引用的给定运算符来读取。

  • 因此,通过添加大约 10 行代码,我们在访问该值时不再需要编写“()”。这是一种改进吗?:-) 我看到有人写“using namespace std;”来保存“std::”前缀的一次使用。即用20个字节“节省”5个字节。 (2认同)