Возможно, вы можете использовать boost::variant
с некоторыми изменениями.Для начала вам нужно указать boost::variant
, какие типы он будет хранить:
boost::variant<int, string, bool> v;
Поскольку вы, вероятно, будете использовать этот тип в нескольких местах, вы, вероятно, захотите создать для него псевдоним.,то есть
typedef boost::variant<int, string, bool> myvar;
, тогда вы можете использовать myvar напрямую:
myvar x = "hello";
myvar y = 20;
myvar z = false;
для получения значений:
string s = boost::get<string>(x);
int i = boost::get<int>(y);
bool b = boost::get<bool>(z);
Если вы попытаетесь получить тип, отличный от сохраненногов варианте он выдаст исключение.
Вы можете запросить тип варианта с помощью функции-члена which ().Он вернет индекс, основанный на 0, для типа, который в данный момент содержит вариант.
switch (x.which()) {
case 0: // it's an int
case 1: // it's a string
case 2: // it's a bool
}