Мы используем список типов как своего рода безопасную для типов композицию, но где каждый дочерний элемент доступен через один интерфейс:
// 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();
Помимо этого, есть интерфейс для итерации и встроенная поддержка дляфункторы.
Преимущество заключается в том, что вы можете относиться к детям независимо или однородно, в зависимости от необходимости.
Недостатком является то, что вы жертвуете определенной степенью абстрактности.Вещи становятся намного более конкретными.Он также вводит новый способ работы с композицией, который является новым для тех, кто должен работать с кодом.
Для нас в том месте, где мы его использовали, это было хорошо.