У меня есть некоторый старый код, основанный на контейнерах MPL, использующий enable_if
для активации некоторой диспетчеризации, подобной этой:
typedef boost::mpl::vector<std::int16_t, std::int32_t, int64_t, float, double, std::complex<float>, std::complex<double> > Types;
template <typename Vector>
typename boost::enable_if<typename boost::mpl::empty<Vector>::type, void>::type void process(/*args*/)
{
}
template <typename Vector>
typename boost::disable_if<typename boost::mpl::empty<Vector>::type, void>::type void process(/*args*/)
{
process<typename boost::mpl::pop_front<Vector>::type>();
}
void outside()
{
process<Types>();
}
Так что с C ++ 17 я могу использовать constexpr, но я все ещесписок типов, которые я должен передать в outside
.Есть ли правильный способ объявления типа контейнера, чтобы я мог использовать шаблоны с переменным числом символов?