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

时间:2015-06-17 16:24:11

标签: c++ oop static-cast

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

所有检查都需要在编译时打开

1 个答案:

答案 0 :(得分:0)

您可以将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;
}

Live Demo