Изменение списка типов в C++

Рейтинг: 1Ответов: 1Опубликовано: 26.01.2011

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

typedef LOKI_TYPELIST_1(int) my_list;
#include <header_with_types.h>

// здесь выполняется какая-то работа с полученным списком.

Проблема состоит в том, что после выполнения Loki::Append<> порождает новый список типов, мне же нужно именно изменение существующего списка.

Пока мне не удалось найти или придумать решение.

Ответы

▲ 3Принят

Дело в том, что изменение типа списка при добавлении в него нового типа это фундаментальное свойство технологии метапрограммирования. Вы не можете от этого уйти. Ведь Вы в тип(под кодовым названием "список типов") добавляете новый тип. Очевидно, что тип+тип это новый тип. Если Вы посмотрите как это реализовано в локи, я думаю Вам станет ясно, почему не происходит "изменение" существующего типа, а происходит замена типа. И так же становится ясно, что по другому ни сделать.

Чтобы было по-другому Вам нужны метатипы. В нашем случае это шаблоны, но ведь шаблон как раз здесь свою сигнатуру и не меняет на другую. Как был двухаргументным так и остался)).