Как использовать пару в качестве шаблона с переменным количеством аргументов?
Хоче передать в функцию переменное число пар enum/значение, как это сделать? Пробовал так
template<typename EnumT, typename CharT, std::pair<EnumT, CharT> KeyValueT>
constexpr auto makeStringsMap(KeyValueT... kv)
{
}
и так
template<typename... KeyValueT>
constexpr auto makeStringsMap(KeyValueT... kv)
{
static_assert(std::is_enum_v<decltype(std::get<0>(kv))>);
}
в обоих случаях компилятор ргуается
Ответы (1 шт):
Автор решения: Chorkov
→ Ссылка
Подход с ассертом - приводит к ошибке компиляции, внутри функции, в случае неправильного использования.
template<typename... T1, typename ... T2>
constexpr auto makeStringsMap(std::pair<T1,T2>... kv)
{
static_assert( (std::is_enum_v<T1> && ... ) );
}
Другой вариант:
template<typename T>
concept IsEnum=std::is_enum_v<T>;
template< IsEnum... T1, typename ... T2>
constexpr auto makeStringsMap(std::pair<T1,T2>... kv)
{
return 1;
}
проверка работы:
enum ABC {a,b,c};
auto test = makeStringsMap( std::make_pair(a,1.2), std::make_pair(a,"foo") );