Допустим, у меня есть:
struct M1 { static constexpr int T = 3; }
struct M2 { static constexpr int T = 8; }
struct M3 { static constexpr int T = 19; }
Это действительно два связанных вопроса:
- Каков наилучший способ хранения списка всех типов M, таких, что позже Мне не придется повторяться?
в fantasy-c ++: using AllMs = <M1, M2, M3>;
Учитывая этот список, как мне получить список M :: T (но как типы)?
в fantasy-c ++: using AllMTs = AllMs::T ...;
(возможно, используя std :: integra_type)
Например, я могу умножить наследование от всех O следующим образом:
template <class... M> class K: public O<M>... { }
template <typename ...P> struct ParameterPackApplicator {
template <template <typename...> typename T> using apply = T<P...>;
};
using AllM = ParameterPackApplicator<M1, M2, M3>;
using MultiplyInheritedThing = AllM::apply<K>;
... но я не могу понять, как получить список типов всех M :: T ...