Я пытаюсь создать утилиту, которая включает в себя наследование из одной базы несколько раз, что я делаю, создавая шаблоны для целого числа, чтобы сделать базы отличными. К сожалению, я нашел себя писать что-то вроде следующего:Шаблоны с переменным количеством помеченных оснований
template<size_t I>
struct X {};
template<size_t Len>
struct Y { static_assert(false, "exceeded max length"); };
template<>
struct Y<0> {};
template<>
struct Y<1> : X<0> {};
template<>
struct Y<2> : X<0>, X<1> {};
template<>
struct Y<3> : X<0>, X<1>, X<2> {};
Хотя это имело обыкновение быть очень распространенным узором в старые времена противной C++, я не могу помочь, но чувствую себя лучше, может быть сделано в C + +11, хотя детали ускользают от меня.
Это можно сделать succintly, для любых Len
?
(любые идеи для лучшего заголовка также оценили)
Из любопытства, зачем вам это нужно? – hmjd
@hmjd Это довольно запутанно, но требует многократного повторения одного и того же виртуального обратного вызова и одновременного регистрации только одного. Надеюсь, создав универсальную утилиту, которая делает это выше (с реализацией в классах), я могу избавиться от большого фрагмента кода. – jleahy