использование std :: enable_if для метода шаблонного класса - PullRequest
0 голосов
/ 12 октября 2019

Рассмотрим следующий код

template <class D> class Box {
private:
  D d_;
public:
  Box(D d) : d_(d) {}

  D value() {
    return d_;
  }
  D negate() {
    return -d_;
  }
};

Я бы хотел, чтобы метод negate () присутствовал / был доступен только тогда, когда D арифметического типа. Возможно ли это?

1 Ответ

0 голосов
/ 12 октября 2019

Я нашел способ сделать это:

template <class D> class Box {
private:
  D d_;
public:
  Box(D d) : d_(d) {}

  D value() {
    return d_;
  }

  template< typename T=D >
  typename std::enable_if<is_arithmetic<T>::value, T >::type
    negate() {
    return -d_;
  }
};
...