在父类之外专门化嵌套模板类

问题描述 投票:0回答:1

考虑一下:

#include <utility>

template<typename T> struct Outer {
    template <bool = std::is_trivially_destructible<T>::value>
    struct Details {
        ~Details();
    };
};


template<typename T> 
template<>
Outer<T>::Details<true>::~Details() {
    // do some stuff
}

template<typename T> 
template<>
Outer<T>::Details<false>::~Details() {
    // do some other stuff
}

叮当响火

error: nested name specifier 'Outer<T>::Details<false>::' for declaration does not refer into a class, class template or class template partial specialization

是否可以在不将

Details
的实现完全移至
Outer
类中的情况下完成这项工作?

c++
1个回答
0
投票

您可以使用

constexpr if

#include <utility>

template<typename T> struct Outer {
    struct Details {
        ~Details();
    };
};


template<typename T> 
Outer<T>::Details::~Details() {
    if constexpr(std::is_trivially_destructible<T>::value) {
        // do some stuff
    } else {
        // do some other stuff
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.