选择类构造函数

Select class constructor

本文关键字:构造函数 选择      更新时间:2023-10-16

我想让类模板构造器default,如果它是微不足道的和默认的T,像这样:

template <typename T>
class my_class {
public:
    template <typename <std::enable_if<std::is_trivially_default_constructible<T>::value, int>::type = 0>
    constexpr my_class() = default;
    template <typename <std::enable_if<!std::is_trivially_default_constructible<T>::value, int>::type = 0>
    constexpr my_class() {};
}

当然,这段代码不起作用(如果条件不满足则为空参数)。怎么做呢?

您可以提供单独的专门化,当T是和不是通常的默认可构造的:

template <typename T, bool = std::is_trivially_default_constructible<T>::value>
class my_class {
public:
    constexpr my_class() = default;
};
template <typename T>
class my_class<T, false> {
public:
    constexpr my_class() {};  
};