获取类层次结构中类型的基类

新手上路,请多包涵

是否可以在类层次结构中获取基类类型?

例如:

 struct A{};
struct B{} : public A;
struct C{} : public B;

我想要一些模板,里面有 typedef Base<T>::Type 像这样:

 Base<A>::Type == A
Base<B>::Type == A
Base<C>::Type == A

这可能吗?如果我有多重继承怎么办?

原文由 Mircea Ispas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我认为 std::is_base_of 可以帮助你

#include <type_traits>

std::is_base_of<B, D>()

如果 D 派生自 B 或者如果两者都是相同的非联合类,则提供等于 true 的成员常量值。否则值为假。

您可以使用它来检查一个类是否是另一个类的基类:

 std::is_base_of<A, A>()   // Base<A>::Type == A

std::is_base_of<A, B>()   // Base<B>::Type == A

std::is_base_of<A, C>()   // Base<C>::Type == A

原文由 masoud 发布,翻译遵循 CC BY-SA 3.0 许可协议

C++ 中的类可以有多个基类,因此具有“get me the base”特性是没有意义的。

但是,TR2 新增功能包括新的编译器支持的特征 std::tr2::basesstd::tr2::direct_bases ,它们返回基类的不透明类型列表。

我不确定这是否会进入 C++14,或者是否会独立发布,但 GCC 似乎已经支持这个

原文由 Kerrek SB 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题