У меня есть сценарий, в котором, основываясь на имени спецификации, я хочу сделать членов какой-либо структуры недоступными.Ниже приведен пример:
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 принимает класс enum в качестве ключа и возвращает структуру, определенную в Label
структура.Теперь, основываясь на ключе в Label
struct, я хочу сделать произвольные члены struct data
недоступными в основной функции.Возможна ли такая вещь?Могу ли я изменить разрешение доступа к структуре в operator[]
во время выполнения?