Передача enum как шаблонный параметр

0

Почему следующая функция шаблона

template<typename T>
bool isEqual(const T &v0, const T &v1)
{
    return v0 == v1;
}

не компилируется, когда v1 и v2 перечислены? Как я могу написать функцию шаблона, которая сравнивает переменную с enum: isEqual(color, RED)?

template<typename T>
bool isEqual(const T &v0, const T &v1)
{
    return v0 == v1;
}


int main()
{
    enum Enum
    {
        E1,
        E2,
        E3
    } v1, v2;

    v1 = E1;
    v2 = E1;

    isEqual(v1, v2);

}

TestProject/main.cpp: В функции 'int main()': TestProject/main.cpp: 31: ошибка: нет соответствующей функции для вызова 'isEqual (main() :: Enum &, main() :: Enum &)'

  • 4
    Да, он компилируется ... Вы можете опубликовать пример, где он не компилируется?
  • 1
    Также полезность такой функции сомнительна.
Показать ещё 4 комментария
Теги:
templates

1 ответ

4
Лучший ответ

Вероятно, это означает, что ваш компилятор устарел.

До С++ 11 типы без привязки (например, типы, объявленные внутри функции) не могли использоваться в качестве аргументов шаблона. Это довольно странное ограничение теперь удалено.

Ваш пример должен быть скомпилирован, если вы переместите объявление enum в область пространства имен (давая ему внешнюю ссылку) или используйте современный компилятор: http://ideone.com/QZQjHI

  • 0
    Я нахожусь на gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4). Возможно, "RedHattiness" делает его устаревшим ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню