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();
}
}
};
假设我有一个 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();
}
}
};