2

假设我有一个类在其构造函数中采用布尔值,如果调用不同的函数,则取决于布尔值。

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;
4

1 回答 1

8

符合您所需的 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();
        }
    }
};

wandbox.org 上的实时示例

于 2018-06-27T12:52:27.813 回答