Pandi89 Ответов: 1

SFINAE на параметре шаблона + внешнее определение вложенного класса


Всем привет,
У меня есть класс A, шаблонный с типом T и предложением enable_if, который содержит вложенный класс I (который должен быть определяемым пользователем итератором для A), например:
template <typename T, std::enable_if_t<std::is_arithmetic<T>::value>>
class A {
   public:
      class I;
};


Я не могу найти правильный способ определить I вне A, я понимаю сообщения об ошибках (см. "Что вы пробовали?" сессия) я получаю, но чего мне не хватает, так это правильного способа делать то, что я хочу..

Что я уже пробовал:

Я попробовал это сделать:
template <typename T, std::enable_if_t<std::is_arithmetic<T>::value>>
class A<T>::I {

};

но это дает ошибку
Цитата:
невозможно добавить аргумент шаблона по умолчанию в определение члена шаблона класса


при этом:
template <typename T>
class A<T>::I {

};

выдает эту ошибку:
Цитата:
слишком мало параметров шаблона в повторном объявлении шаблона

CPallini

Я думаю I должно быть в списке аргументов шаблона.

1 Ответов

Рейтинг:
12

Pandi89

Я отвечаю сам себе, я решил эту проблему, переместив проверку enable_if из списка параметров шаблона в конструктор, и все работает нормально, вот так:

template <typename T>
class A {
   public:
      A(std::initializer_list<typename std::enable_if<std::is_arithmetic<T>::value,T>::type> l) {}
      class I;
};

template <typename T>
class A<T>::I {
   public:
      int prova() { return 1; };
};