编写条件可选构造函数的最佳方法
Best way to write a conditionally selectable constructor
我在 C++ 中有以下代码:
struct A;
struct B
{
B(){}
template<typename T>
B(T param){}
};
我希望构造函数模板仅在类型名 T
可转换为类型 A
时才有效。实现此目标的最佳方法是什么?
您想启用构造函数ifT
可转换到A
?使用 std::enable_if
and std::is_convertible
:
template <
class T,
class Sfinae = typename std::enable_if<std::is_convertible<T, A>::value>::type
>
B(T param) {}
这通过应用 SFINAE 起作用;如果 T
不能转换为 A
,替换将失败并且构造函数将从候选重载集中删除。
我在 C++ 中有以下代码:
struct A;
struct B
{
B(){}
template<typename T>
B(T param){}
};
我希望构造函数模板仅在类型名 T
可转换为类型 A
时才有效。实现此目标的最佳方法是什么?
您想启用构造函数ifT
可转换到A
?使用 std::enable_if
and std::is_convertible
:
template <
class T,
class Sfinae = typename std::enable_if<std::is_convertible<T, A>::value>::type
>
B(T param) {}
这通过应用 SFINAE 起作用;如果 T
不能转换为 A
,替换将失败并且构造函数将从候选重载集中删除。