Безымянные перечисления в шаблонах - PullRequest
4 голосов
/ 03 марта 2009

Многое шаблонный код выглядит так:

template <typename T>
class foo
{
   enum { value = <some expr with T> };
};

Пример можно увидеть здесь в программе первичной проверки, и я тоже видел его в реализации Factorial.

Мой вопрос: зачем использовать безымянное перечисление? Есть ли конкретная причина для этого? Например, может работать статический констант int?

редактирование:

@ Benoît: Спасибо за ссылку, она дала понимание, которое я искал!

Ответы [ 2 ]

8 голосов
/ 03 марта 2009

Статическая переменная const будет занимать память (как сказал Шон), тогда как перечисления не занимают никакой памяти. Они существуют только в мире компилятора. Во время выполнения они являются обычными целыми числами.

Кроме того, это будет работать, за исключением плохой реализации стандарта компилятором.

Существует полная ветка на эту тему в расширенном списке рассылки:

3 голосов
/ 03 марта 2009

Если я правильно помню, статическая константа потребует от вас выделения пространства путем объявления и определения переменной, тогда как безымянное перечисление - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...