我在C ++中有以下代码:
struct A;
struct B
{
B(){}
template<typename T>
B(T param){}
};
我希望构造函数模板仅在typename T
可转换为类型A
时才有效。实现这一目标的最佳方法是什么?
答案 0 :(得分:10)
如果 T
可转换到A
,您想启用 构造函数吗?使用std::enable_if
和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
,则替换将失败,构造函数将从候选重载集中删除。