Скажите, что у вас есть тип кортежа, и вы хотите извлечь его пакет параметров шаблона, чтобы создать экземпляр другого шаблона. Если это шаблон типа, то я могу иметь утилиту так:Переменный шаблон шаблона?
template < typename Tuple, template <typename...> typename What >
struct PutTupleInT;
template < typename... Types, template <typename...> typename What >
struct PutTupleInT<std::tuple<Types...>, What>
{
using Result = What<Types...>;
};
Но что если нужный шаблон является переменным шаблоном? В то время как template <typename...> typename What
является «заполнителем» для шаблона типа, то что такое «заполнитель» для шаблона переменной?
Я пробовал следующее для clang-4.0.0 (единственный компилятор теперь поддерживает параметры шаблона непигового типа с автоматическим типом), но это не удалось. На самом деле я не уверен, что это правильный синтаксис для C++ 17.
template < typename Tuple, template <typename...> auto What >
struct PutTupleInV;
template < typename... Types, template <typename...> auto What >
struct PutTupleInV<std::tuple<Types...>, What>
{
static constexpr auto value = What<Types...>;
};
Не можете ли вы использовать 'decltype (vartempl)' и извлечь тип шаблона переменной, что вас действительно интересует? – skypjack
@skypjack Извините, я не совсем понимаю, что вы имеете в виду. – Vahagn