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

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,替换将失败并且构造函数将从候选重载集中删除。