如何将匿名联合体中的单个成员设置为public公有权限
问题解答
C++标准不支持给匿名联合体内部的单个成员单独指定访问权限,访问控制的最小粒度是整个联合体,所以完全不使用getter函数、也不使用任何引用的原生写法无法实现你的需求。
如果你可以接受用非const公开引用绑定底层联合体成员,不需要写getter函数、也不需要用到const引用,就能实现x、y可公开访问、arr对外隐藏的效果,实现代码如下:
class Test { private: // 私有嵌套联合体,隐藏不需要对外暴露的arr成员 union InnerUnion { int arr[2]; struct { int x; int y; }; } inner; public: // 公开非const引用绑定需要暴露的成员 int& x = inner.x; int& y = inner.y; }; int main() { Test test; test.x = 0; // 可正常编译执行 // test.arr[0] = 1; // 编译报错,arr为私有成员无法访问 return 0; }
该方案的唯一额外开销是每个公开成员会占用一个指针大小的引用存储空间。如果你的场景对内存占用要求极高,无法接受引用的额外开销,那么只能用getter/setter的实现方案,没有其他符合C++标准的实现方式。
内容的提问来源于stack exchange,提问作者FatalCatharsis
相关产品推荐
相关产品推荐

