检查 class 是否可以类型转换为另一个

To Check if a class can be typecast to another

如果我有模板函数

template<class T, class U>
T foo (U a);

如何检查 class U 的对象是否可以类型转换为对象 T

也就是如果classU有一个成员函数

operator T(); // Whatever T maybe

或者class T有一个构造函数

T(U& a); //ie constructs object with the help of the variable of type U

你可以使用 std::is_convertible (C++11 起):

template<class T, class U>
T foo (U a) {
    if (std::is_convertible_v<U, T>) { /*...*/ }
    // ...
}

请注意,is_convertible_v 是从 C++17 开始添加的,如果您的编译器仍然不支持它,您可以改用 std::is_convertible<U, T>::value