gpt4 book ai didi

c++ - 如何在编译时查询一个类的所有基类?

转载 作者:太空狗 更新时间:2023-10-29 21:07:22 25 4
gpt4 key购买 nike

std::is_base_of<A,B>::value可以检查一个类 A是一个基类类 B . 是否也可以向编译器查询一个类的所有基类 B ,例如 base_classes_of<B>返回包含 B 的所有基类的 std::tuple ?

有没有evtl。可以实现此目的的 g++ 中的非标准扩展?

如果这根本不可能,有人知道为什么吗?这听起来像是一个相当基础的编译器应该很容易获得的信息?

例子:

#include <type_traits>
#include <tuple>

struct A {};
struct B : A {};

static_assert(std::is_base_of<A, B>::value, "A is base of B");
static_assert(! std::is_base_of<B, A>::value, "but B is not base of A");

// now I am looking for something like
// typedef base_classes_of<B>::type B_bases;
// static_assert(std::is_same<B_bases, std::tuple<A>>::value, "all bases of B are: A");

int main() {}

最佳答案

类似的设施 basesdirect_basesN2965 .
至于数据成员,由于数据成员可以是位域,它们的类型特征有一些微妙之处。
另一方面,基类没有这样的问题。
我认为需要像 bases 这样的编译时查询在某些情况下,如 N2965 的激励示例中所述。
然而,不幸的是,当前的 C++ 缺少它,据我所知,GCC 和 Clang-C++ 目前似乎没有提供类似的设施......

关于c++ - 如何在编译时查询一个类的所有基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281103/

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