Шаблоны typedefs – Какая у вас работа?

C ++ 0x имеет псевдонимы шаблонов (иногда называемые шаблонами typedefs). См. Здесь . Текущей спецификации C ++ нет.

Что вы любите использовать в качестве работы? Контейнерные объекты или macros? Вы чувствуете, что это того стоит?

Что вы любите использовать в качестве работы? Контейнерные объекты или macros? Вы чувствуете, что это того стоит?

Канонический способ – использовать метафунд, например:

template  struct my_string_map { typedef std::map type; }; // Invoke: my_string_map::type my_str_int_map; 

Это также используется в STL ( allocator::rebind ) и во многих библиотеках, включая Boost. Мы широко используем его в биоинформационной библиотеке .

Это раздуто, но это лучшая альтернатива в 99% случаев. Использование макросов здесь не стоит многих недостатков.

(EDIT: Я внесла поправки в код, чтобы отразить соглашения Boost / STL, как указал Даниэль в своем комментарии).

 template  struct my_string_map : public std::map { }; 

Вы не должны наследовать от classов, у которых нет виртуального деструктора. Это связано с деструкторами в производных classах, которые не вызываются, когда они должны быть, и вы могли бы получить нераспределенную память.

Это, как говорится, может быть *****, вероятно, уйти с ним в приведенном выше примере, потому что вы не добавляете больше данных в ваш производный тип. Обратите внимание, что это не одобрение. Я все еще советую, чтобы вы этого не делали. Тот факт, что вы можете это сделать, не означает, что вы должны .

EDIT: Да, это ответ на сообщение ShaChris23. Я, вероятно, пропустил что-то, потому что он появился выше его / ее сообщения, а не ниже.

Иногда вы можете просто явно выписать неиспользуемые typedef для всех необходимых типов. Если базовый class шаблонизирован в нескольких шаблонных аргументах только с одним типом, который требуется для typedefed, вы можете наследовать специализированный class с typedef, который эффективно включается в имя унаследованного classа. Этот подход менее сложный, чем метод метафлора.

  • Handlebars.js, если хелпер блока ==
  • Что такое неопределенный контекст?
  • Ошибка «Undefined symbols» с компоновщиком простого шаблона
  • std :: function vs template
  • Почему class производных шаблонов не имеет доступа к идентификаторам базового шаблона?
  • Вызов шаблона с несколькими параметрами трубопровода
  • Виртуальный метод шаблона C ++
  • SFINAE для проверки наследуемых функций-членов
  • Что такое «выражение SFINAE»?
  • Как получить текущий URL-адрес в шаблоне Django?
  • Как перенаправить объявление classа шаблона в пространстве имен std?
  • Interesting Posts
    Давайте будем гением компьютера.