Я реализую экстрактор типа extract_type<Class, nth-type>
для любого шаблона. Пример использования показан ниже:Извлечь тип из шаблонного класса
template <int, short, float, double, char> class C;
extract_type<C, 0>::type => int
extract_type<C, 1>::type => short
extract_type<C, 2>::type => float
extract_type<C, 3>::type => double
extract_type<C, 4>::type => char
Вот моя реализация.
// extract_type: recursive definition.
template <template <typename...> class C, size_t idx, typename T, typename... RestT>
struct extract_type;
// extract_type: base
template <template <typename...> class C, typename T, typename... RestT>
struct extract_type< C<RestT...>, 0, RestT... > {
using type = T;
};
// extract_type: recursive definition.
template <template <typename...> class C, size_t idx, typename T, typename... RestT>
struct extract_type : public extract_type< C<RestT...>, idx-1, RestT... > {
};
Однако компилятор жалуется
типа/несовпадение значения в аргументе 1 в списке параметров шаблона для «шаблонного класса C, долго без знака INT IDX, класс T, класс ... RestT> структура OpenCluster :: extract_type» структура extract_type < пустота, 0, RestT ...>
Как я могу получить это решить?
Связанные: http://stackoverflow.com/questions/16928669/how-to -get-n-th-type-from-a-tuple – kennytm
'template class C' - это шаблонный шаблонный параметр, который внезапно становится параметром шаблона типа в пространственной сортировке. Кроме того, '', это несимвольные параметры шаблона, поэтому 'class C' нельзя даже сопоставить с шаблоном class C' –
Вы действительно хотите' extract_type ', а не' extract_type , 1> '? –