如何使指针成员数据的常量随父实例的常量变化?
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;
}
我有一个像这样的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;
}