检查 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
。
如果我有模板函数
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
。