选择类构造函数

时间:2016-10-03 08:32:17

标签: c++ templates

我想创建类模板构造函数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() {};
}

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

1 个答案:

答案 0 :(得分:2)

您可以为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() {};  
};