Скажем, у меня есть класс "Код", определенный следующим образом, с указанным пользователем преобразованием типа в int:
class Code
{
public:
int code;
std::string description;
Code (const int c, const std::string& d) : code(c), description(d) { ; }
operator int() const { return code; }
};
И второй класс "Мастер", использующий класс кода:
class Master
{
public:
Code master_code;
};
Так же, как и набор заранее заданных кодов, например:
const Code CODE_ONE (1, "This is code one");
const Code CODE_TWO (2, "This is code two");
const Code CODE_THREE (3, "This is code three");
Можно подумать (то есть, я бы подумал), что можно использовать его так:
Master master_obj;
switch (master_obj.master_code)
{
case CODE_ONE:
// ...
break;
case CODE_TWO:
// ...
break;
case CODE_THREE:
// ...
break;
default:
// ...
}
из-за автоматического преобразования типов в int, но это, очевидно, не так.GCC сообщает мне, что CODE_ONE, CODE_TWO и CODE_THREE "не могут появляться в выражении-константе".
Кстати, это тоже не работает:
Master master_obj;
switch (master_obj.master_code)
{
case CODE_ONE.code:
// ...
break;
case CODE_TWO.code:
// ...
break;
case CODE_THREE.code:
// ...
break;
default:
// ...
}
Выше приведено точноета же ошибка: «CODE_ONE» не может появляться в константном выражении »в дополнение к« ».не может отображаться в константном выражении ".
Но это работает:
Master master_obj;
switch (master_obj.master_code)
{
case 1:
// ...
break;
case 2:
// ...
break;
case 3:
// ...
break;
default:
// ...
}
То есть CODE_ONE и т. д. не могут быть разрешены как константные выражения?Это кажется странным ... Или я делаю что-то не так?