使用enable_if部分专门化类模板成员

时间:2019-06-30 19:47:26

标签: c++ c++17

您如何仅对算术类型使用类成员?

我想获得类似的东西:

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}

但是还有更优雅的方法吗?

0 个答案:

没有答案