частично специализировать член шаблона класса, используя enable_if - PullRequest
0 голосов
/ 30 июня 2019

Как вы специализируете члена класса только на арифметических типах?

Я хочу получить что-то подобное:

template<typename T>
struct A{
    std::vector<T> member;
}

template<typename T>
std::vector<enable_if_t<is_arithmetic_v<T>, T>> A<enable_if_t<is_arthmetic_v<T>, T>::member = {}

Но это не компилируется.

изменить: я нашел одно решение:

template<typename T>
struct A_arit  {
    static std::vector<T> member;
}

template<typename T>
struct A_not_arit  {
    static std::vector<T> member;
}

template<typename T, class Parent = std::conditional_t<
      std::is_arithmetic_v<T>, A_arit<T>,
      A_nA<T>>>
struct A : public Parent  {
    using Parent::member;
}

template<typename T>
std::vector<T> A_arit<T>::member = {elementsForArithmetics}

template<typename T>
std::vector<T> A_not_arit<T>::member = {elementsForOthers}

а есть ли более элегантный способ?

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