使公共数据成员在C++中无法访问
Making public data members unreachable in C++
我有一个场景,根据规范名称,我想使某些结构的成员无法访问。示例如下:
enum schema { IFC_1, IFC_2, IFC_3, IFC_4 };
template <typename T>
using map_type = map <schema, T>;
struct Label
{
//Imaginary Superset of Label
//From different specs
struct data {
variant <int, char, string> x;
variant <int, char, string> y;
variant <int, char, string> z;
variant <int, char, string> a;
variant <int, char, string> b;
};
map_type<data> abc;
data & operator[] (const schema & key){
data & obj = abc[key];
/*
if(key == IFC_1)
then make some members unreachable.
at compiletime or runtime
*/
return abc[key];
}
};
int main(){
Label x;
x[IFC_1].x = 0; // all member above are accesible
x[IFC_2].x = 0; // is it possible to make x unreachable when spec is IFC_2?
return 0;
}
在上面的代码中,有一个Label
结构体,它有一个 std::map,将枚举类作为其键,并返回一个在结构Label
中定义的结构。现在基于结构Label
键,我想在 main 函数中无法访问struct data
的任意成员。这样的事情可能吗?我可以在运行时更改operator[]
中结构的访问权限吗?
不,你不能。这在语法上是不可能的,并且在编译时会静态检查访问权限,因此它在运行时对您没有用处。
如果你想让一些值不存在,并且能够像这样表示它们,你可以使用 std::optional 之类的东西
也许这对您静态组合结构很有帮助。仅当方案静态可用时,此操作才有效。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- C++:无法访问声明的受保护成员
- 通过指向指针数组的指针访问子类的属性
- 如何使用单独文件中的派生类访问友元函数对象