Использование typelist - PullRequest
       30

Использование typelist

2 голосов
/ 07 апреля 2011

Является ли Typelist (в смысле определения Александреску) главным образом полезным для создания иерархии классов (и, может быть, для такого класса, как boost :: tuple), или есть много других доменов, где typelist очень полезен?

Ответы [ 4 ]

4 голосов
/ 07 апреля 2011

Используется также в Смешанном программировании на C ++ , описанном Ульрихом Эйзенекером, Фрэнком Блинном и Кшиштофом Царнеком.

3 голосов
/ 07 апреля 2011

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

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

Boost Spirit часто цитируется в качестве основного примера метапрограммирования шаблона, хотяк сожалению, я не могу вам многое рассказать об этом.

2 голосов
/ 07 апреля 2011

Мне кажется, что списки типов наиболее полезны в качестве строительного блока для других универсальных библиотек, а не используются непосредственно в коде клиента. Не используйте инструмент более низкого уровня, если Boost-кортежи или MPL достаточно гибки, чтобы делать то, что вам нужно. Но нечего сказать, что вы не могли бы напрямую использовать списки типов, если вам нужна такая гибкость.

0 голосов
/ 07 апреля 2011

Мы используем список типов как своего рода безопасную для типов композицию, но где каждый дочерний элемент доступен через один интерфейс:

// Defining a typelist:
typedef TypeList<A,
        TypeList<B,
        TypeList<C, NullType> > > MyTypeList;
MyTypeList tl;

// Setting values in the typelist:
A a;
tl.set(a);
C c;
tl.set(c);
tl.tail().head() = newB;

// Retrieving values from the typelist:
C c = tl.get<C>();
B b = tl.tail().head();

// To reinitialize a value:
tl.reset<B>();
tl.set(B());

// To get total size:
int size = tl.count();

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

Преимущество заключается в том, что вы можете относиться к детям независимо или однородно, в зависимости от необходимости.

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

Для нас в том месте, где мы его использовали, это было хорошо.

...