Как создать массив для хранения классов C ++ (не экземпляров), которые будут использоваться итеративно в шаблонной функции - PullRequest
2 голосов
/ 30 сентября 2010

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

MyTemplateFunction<ClassOne>( &AnotherTemplateFunction<ClassOne> );
MyTemplateFunction<ClassTwo>( &AnotherTemplateFunction<ClassTwo> );
MyTemplateFunction<ClassThree>( &AnotherTemplateFunction<ClassThree> );
MyTemplateFunction<ClassFour>( &AnotherTemplateFunction<ClassFour> );

Есть ли способ создать массив специализаций для классов ClassOne, ClassTwo и т. Д., Чтобы я мог просто перебирать массив для лучшей ремонтопригодности.

редактирование: Я специально использую функцию register_exception_translator в Boost.Python. Так что у меня нет выбора. Это сторонняя функция, которую я должен вызывать для всех моих классов, которых в моем проекте более 50. Подобные повторения вызовов были сложным процессом при добавлении или изменении классов.

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010

Вы должны изучить Boost.MPL , в частности последовательности .

3 голосов
/ 01 октября 2010

Как-то так должно хватить

template<typename I, typename N> struct cons { };
struct nil { };

template<typename T, typename U>
void call(cons<T, U>) {
  MyTemplateFunction<T>(&AnotherTemplateFunction<T>);
  call(U());
}

void call(nil) { }

typedef cons<ClassA, cons<ClassB, cons<ClassC, nil> > > conses;
int main() {
  call(conses());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...