gpt4 book ai didi

c++ - 检测公共(public)基类

转载 作者:可可西里 更新时间:2023-11-01 18:37:31 24 4
gpt4 key购买 nike

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

struct TOP{};
struct L : TOP{};
struct R : TOP{};
struct LL : L{};
struct LR : L{};
struct RL : R{};
struct RR : R{};

是否可以编写一个元函数来返回两种类型的公共(public)基类型? (如果不存在公共(public)基类,它可能返回 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

显然这不适用于多重继承,但我专注于单一继承的情况。

首先,如果不对基类进行一些内省(introspection),这似乎是不可能的。所以,我有一个更简单的问题,以这样一种方式来做到这一点,即每个类都知道它的基础(通过内部 base 类型),例如:

struct LR : L{using base = L;};

即使这样,我似乎也无法正确进行元编程。

我还在某处(我现在找不到)读到 GCC 有一些扩展来检测公共(public)基类。是这样吗?

最佳答案

在某个时候有 basesdirect_bases 在 std::tr2 but that wasn't included .某些版本的 gcc 有它。使用这些也许你可以得到你想要的。

关于c++ - 检测公共(public)基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com