C++ 17:如何使用 if constexpr 调用不同的构造函数?

C++ 17: How to call a different constructor using if constexpr?

假设我有一个 class 在它的构造函数中接受一个布尔值并且取决于布尔值,如果调用不同的函数。

class MyClass {
    MyClass(bool is_second)
    {
        common_code();
        if (!is_second)
            first_constructor();
        else
            second_constructor();
    }
};

我是 C++17 的新手,我想知道是否可以使用模板编程和 if constexpr 编写此逻辑。 api 是这样的:

MyClass<> obj_calls_first_const;
MyClass<is_second_tag> obj_calls_second_const;

符合您的要求API:

struct is_second_tag { };

template <typename T = void>
struct MyClass
{
    MyClass()
    {
        if constexpr(std::is_same_v<T, is_second_tag>)
        {
            second_constructor();
        }
        else 
        {
            first_constructor();
        }
    }
};

live example on wandbox.org