Подтвердить что ты не робот

Выполнение перечисления в 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?

4b9b3361

Ответ 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.

то есть. Значение для прохода или отказа.