LINUX.ORG.RU

Параметризация шаблона разными значениями enum

 


0

4
template <typename Enum, E Value> struct Foo {};

enum X { A, B };
enum Y { C, D };

Foo<X, A> foo1;
Foo<Y, D> foo2;

При создании значений foo1 и foo2 шаблон необходимо параметризовать и типом enum и значением, что очевидно избыточно, так как значение уже связано с конкретным типом. Как сократить запись до:

Foo<A> foo1;
Foo<D> foo2;

Решения из C++11 приветствуются.

★★★★★

Последнее исправление: beastie (всего исправлений: 1)

А если значение «А» существует в нескольких enum?
Или вообще само по себе?

AF ★★★
()
Ответ на: комментарий от AF

В C++03 (до enum class) значение enum существует в родительском пространстве имён, коллизии будут ошибкой компиляции. Дедукция типа прекрасно работает в таком случае внутри функции:

template <typename Enum>
void foo(Enum value) {}

enum X { A, B };

foo(A);
Dendy ★★★★★
() автор топика
Ответ на: комментарий от anonymous

С макросами понятно, но неужели это единственный способ?

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Boy_from_Jungle

Если вопрос мне, то в C++11 всё нормально.

Dendy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.