【问题标题】:implement static cast on C++在 C++ 中实现 static_cast
【发布时间】:2015-09-03 00:27:36
【问题描述】:

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

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

【问题讨论】:

  • 你想要is_convertibleis_constructible;例如请参阅N4064 中的“完美初始化”。
  • 我只能使用不需要的基本工具和#include
  • @shay:那你最好写一个编译器……否则接下来几周你要做的就是重新发明一半的标准库,这样你就可以重新发明一个内置运算符...
  • 我得到了函数 f(),如果 T 和 U 可隐式转换,则编译,函数 g(),如果 T 从 U 继承,则编译,但我不知道“如果 f()不编译尝试 g()"

标签: c++ oop static-cast


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多