在C++上实现静态强制转换

implement static cast on C++

本文关键字:转换 静态 实现 C++      更新时间:2023-10-16

我正在尝试实现静态强制转换。我需要检查类型 T 和你是否隐式可转换,如果没有,请检查一个是否从另一个继承。我可以编写一个类来检查它们中的每一个,但我不明白如何检查隐式转换,如果它不编译,请检查继承。

编译时需要打开的所有检查

您可以将type_traits,特别是std::is_convertiblestd::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;
}

现场演示