检测公共基类

alf*_*lfC 7 c++ inheritance introspection base-class c++11

假设一个人有一个类层次结构,没有多重继承:

struct TOP{};
struct L : TOP{}; 
struct R : TOP{};
struct LL : L{};
struct LR : L{};
struct RL : R{};
struct RR : R{};
Run Code Online (Sandbox Code Playgroud)

是否有可能编写一个返回两种类型的公共基类型的元函数?(void如果不存在公共基类,则可以返回.) 例如

common_base<RR, R>::type == R
common_base<RL, RR>::type == R
common_base<LL, RR>::type == TOP
common_base<LL, std::string>::type == void
Run Code Online (Sandbox Code Playgroud)

显然这不适用于多个inhertance,但我专注于单继承案例.

首先,如果没有对基类进行一些反省,似乎是不可能的.所以,我有这个更容易的问题,以每个clase知道它的基础(通过内部base类型)的方式来做,例如:

struct LR : L{using base = L;};
Run Code Online (Sandbox Code Playgroud)

即便以这种方式,我似乎无法正确地进行元编程.

我也读到了某处(我现在找不到),GCC有一些扩展来检测公共基类.是这样的吗?

Pav*_*l P 3

在 std::tr2 中曾有过一些基础但没有包括在内。gcc 的某些版本有它。使用这些也许你可以得到你想要的。direct_bases