编写有条件可选构造函数的最佳方法

时间:2015-03-03 13:59:02

标签: c++ c++11 template-meta-programming sfinae

我在C ++中有以下代码:

struct A;

struct B
{
    B(){}

    template<typename T>
    B(T param){}
};

我希望构造函数模板仅在typename T可转换为类型A时才有效。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:10)

如果 T 可转换A,您想启用 构造函数吗?使用std::enable_ifstd::is_convertible

template <
  class T,
  class Sfinae = typename std::enable_if<std::is_convertible<T, A>::value>::type
>
B(T param) {}

这适用于SFINAE;如果T无法转换为A,则替换将失败,构造函数将从候选重载集中删除。