我正在尝试实现静态强制转换。我需要检查T和U类型是否可以隐式转换,如果不检查是否从另一个继承。我可以写一个类来检查它们的每一个,但我不能理解如何检查隐式转换,如果它没有编译检查继承。
所有检查都需要在编译时打开
答案 0 :(得分:0)
您可以将type_traits
,特别是std::is_convertible
与std::is_base_of
结合使用:
template<typename T, typename U, typename std::enable_if<std::is_convertible<T, U>::value ||
std::is_base_of<T, U>::value>::type* = nullptr>
T mystatic_cast(U &u)
{
return u;
}