Выполнение перечисления в int
У меня проблема с этим кодом:
template <typename T>
void dosth(T& value,const T& default_value)
{
if (condition)
value = 10;
else
value = default_value;
}
Когда я вызываю это с помощью
enum {
SITUATION1,
STIUATION2
};
int k;
dosth(k,SITUATION1);
компилятор (g++ 4.5) говорит
нет соответствующей функции для вызова todosth (int &,) '
Почему компилятор автоматически не переводит enum в int?
Ответы
Ответ 1
Ваша проблема связана с тем, что шаблон не может быть создан из аргументов функции, которые вы поставляете. Не происходит никакого неявного преобразования в int
, потому что нет никакой функции для вызова вообще.
Если вы вместо того, чтобы пытаться полагаться на неявное преобразование, вместо ваша программа будет работать:
dosth(k, static_cast<int>(SITUATION1));
Или, если вы явно укажете аргументы шаблона функции, аргумент функции будет преобразован неявно, как вы ожидаете, и ваша программа будет работать
dosth<int>(k, SITUATION1);
Ответ 2
Будет ли это лучше для перечислений?
class Situations
{
private:
const int value;
Situations(int value) : value(value) {};
public:
static const Situations SITUATION1() { return 1; }
static const Situations SITUATION2() { return 2; }
int AsInt() const { return value; }
};
Включит безопасность типа. Затем используйте его для создания шаблона типа safte.
то есть. Значение для прохода или отказа.