Как выполнить type_check во время компиляции и компилировать части моего класса, только если тип членов моего класса соответствует типам? - PullRequest
0 голосов
/ 19 мая 2018
template<class T = int>
struct v2 {
  T x;
  // this is the part
  template<class T, std::enable_if?>
  v2& operator++(int n) {}
};

Я хотел бы включить его, чтобы ++v2 компилировался только тогда, когда он является целым (или длинным), а не, если это что-то еще.

1 Ответ

0 голосов
/ 19 мая 2018

Вам необходимо частично специализировать v2:

template<class T = int, typename = void>
struct v2 {
  T x;
};

template<class T>
struct v2<T, std::enable_if_t<std::is_same_v<T, int> || std::is_same_v<T, long>>> {
  T x;
  v2& operator++(int);
};

В качестве альтернативы, общая функциональность может быть помещена в другой класс, используемый в качестве основы v2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...