C++ 使公共数据成员在C+中无法访问+;

C++ 使公共数据成员在C+中无法访问+;,c++,class,c++11,C++,Class,C++11,我有一个场景,在这个场景中,基于规范名,我希望使某些结构的成员不可访问。例如: 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 {

我有一个场景,在这个场景中,基于规范名,我希望使某些结构的成员不可访问。例如:

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;
}
enum模式{IFC_1,IFC_2,IFC_3,IFC_4};
模板
使用map_type=map;
结构标签
{
//标签的虚超集
//不同规格
结构数据{
变体x;
变异体y;
变体z;
变体a;
变式b;
};
地图式abc;
数据和运算符[](常量模式和键){
数据&obj=abc[key];
/*
如果(键==IFC_1)
然后使一些成员无法访问。
在编译时或运行时
*/
返回abc[键];
}
};
int main(){
标签x;
x[IFC_1].x=0;//以上所有成员均可访问
x[IFC_2].x=0;//当等级库为IFC_2时,是否可能使x不可访问?
返回0;
}

在上面的代码中,有一个
标签
结构,它有一个std::map,将枚举类作为其键,并返回在
标签
结构中定义的结构。现在,基于
Label
struct中的键,我想使
struct data
的任意成员在主函数中不可访问。这可能吗?我可以在运行时更改
操作符[]
中结构的访问权限吗?

不,您不能。这在语法上是不可能的,并且在编译时会静态检查访问权限,因此在运行时对您没有任何用处

如果您想让一些值不存在,并且能够这样表示它们,您可以使用


也许对你静态地构造结构是有帮助的。只有当方案静态可用时,这才有效。

不,您不能。这在语法上是不可能的,并且在编译时会静态检查访问权限,因此在运行时对您没有任何用处

如果您想让一些值不存在,并且能够这样表示它们,您可以使用


也许对你静态地构造结构是有帮助的。这仅在方案静态可用时有效。

我想根据模式类型限制对
数据的成员的访问<代码>数据
是所有方案中所有数据成员的超集。当提供模式时,它可能没有所有的成员,因此我正在寻找一种方法来限制提供规范后的访问。如果您静态地知道它在某一点上是哪个模式,您可以只使用另一个结构,因为这样您就知道要使用哪个,或者只使用您想要的值。如果没有,你希望发生什么?您想要一个编译错误吗?还是不希望在运行时执行该语句?我不想使用另一个结构,因为这将导致大量代码重复,而我只想使现有结构失效。方案信息是静态可访问的。我想完成的是,当其他程序员开始使用此设计时,我不希望他们访问不属于特定方案版本的成员。上面是一个超集,但我希望用户只能访问相关的数据成员。编辑我的回答我希望根据架构类型限制对
数据的成员的访问<代码>数据
是所有方案中所有数据成员的超集。当提供模式时,它可能没有所有的成员,因此我正在寻找一种方法来限制提供规范后的访问。如果您静态地知道它在某一点上是哪个模式,您可以只使用另一个结构,因为这样您就知道要使用哪个,或者只使用您想要的值。如果没有,你希望发生什么?您想要一个编译错误吗?还是不希望在运行时执行该语句?我不想使用另一个结构,因为这将导致大量代码重复,而我只想使现有结构失效。方案信息是静态可访问的。我想完成的是,当其他程序员开始使用此设计时,我不希望他们访问不属于特定方案版本的成员。上面是一个超集,但我希望用户只能访问相关的数据成员。编辑了我的答案