如何使指针成员数据的常量随父实例的常量变化?

How to make a pointer member data's constness vary with the parent instance's constness?

我有一个像这样的class:

struct Example
{
    std::unique_ptr<int> pointer_member;
};

我希望 pointer_member 的类型在操作 Example const 的实例时为 std::unique_ptr<int const> const,而在操作 Example 的实例时为 std::unique_ptr<int>

到目前为止我能想到的最佳解决方案涉及模板,但它确实是样板式的并且不是很有用(因为模板参数传播到使用 Example 的代码):

template <bool is_const>
struct Example
{
    std::unique_ptr<std::conditional_t<is_const, int const, int>> pointer_member;
};

同样在这里,没有什么能阻止我使用 Example<false> const 个实例,这真的很烦人。

知道如何以更好的方式实现这一目标吗?

封装允许控制成员的可修改性(又名常量):

#include <memory>
struct Example {
    const int& get() const {
        return *pointer_member;
    }
    int& get() {
        return *pointer_member;
    }
private:
    std::unique_ptr<int> pointer_member = std::make_unique<int>(42);
};


int main(){
    const Example ex1;
    const int& const_ref = ex1.get();
    Example ex2;
    ex2.get() = 123;
}