Бих искал някакъв начин да оценя израз на клас за превключване, използвайки членове на класа, които не са цели числа или eum.
Истинският въпрос е как да направим тези членове на класа const-expression
, т.е. тези членове трябва да бъдат известни като постоянни по време на компилиране.
Опитах кода по-долу с static const
, но работи само когато в операторите case
има цели числа.
Гледах нов C++11 constexpr
, който щеше да свърши работа.
Какво ще стане, ако нямам налична тази ключова дума? Има ли все пак или трик или нещо, което да позволи на членовете на моя клас (не цяло число или enum) да бъдат константни изрази?
Използвам Linux и g++. Също така всяка специфична ключова дума за g++ ще бъде оценена.
class MyEnum
{
public:
int val_;
MyEnum(){}
MyEnum(int v): val_(v){}
operator int(){return val_;}
static const MyEnum ALFA;
static const MyEnum BETA;
void foo() {
// do something.
}
};
const MyEnum MyEnum::ALFA(1);
const MyEnum MyEnum::BETA(2);
void testEnum()
{
MyEnum val = MyEnum::ALFA;
switch(val)
{
case 0: //works
//case MyEnum::ALFA:// doesn't work
cout << "ciao" << endl;
break;
case 1: //works
//case MyEnum::BETA: // doesn't work
cout << "bello" << endl;
break;
default:
break;
}
}
MyEnum::ALFA == MyEnum::BETA
(и че инициализирате и двете до нула?) - person Massa   schedule 10.04.2014