gpt4 book ai didi

c++ - 检查该类在编译时是否具有C++中的任何基类

转载 作者:行者123 更新时间:2023-12-02 10:02:31 26 4
gpt4 key购买 nike

我想使用C++中的类型实用工具检查类X是否具有 ANY 基类。

例如:

class X : public Y
{
}
static_assert(std::has_base_class<X>::value, "") // OK

但:
class X
{
}
static_assert(std::has_base_class<X>::value, "") // Failed

标准库中是否存在类似于我想象中的 has_base_class的内容?谢谢!

最佳答案

如注释中所述,您不能在标准C++中完全做到这一点。从std库获得的最接近的是 std::is_base_of ,但这是用于测试特定的基类的。

但正如here所述,GCC具有 std::tr2::bases (和std::tr2::direct_bases),可以解决您的泛型“具有任何基础”断言的问题。这些来自N2965 proposal,不幸的是,它们是std C++的rejected

这是一个示例代码,显示了如何使用此GCC扩展来断言您想要的内容:

#include <tr2/type_traits>

class B {};

class X : public B {};
static_assert(std::tr2::bases<X>::type::empty(),"X");
// doesn't compile because X bases tuple returned is not empty

class Y {};
static_assert(std::tr2::bases<Y>::type::empty(),"Y");

#include <iostream>
using namespace std;

int main() {
return 0;
}

关于c++ - 检查该类在编译时是否具有C++中的任何基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61933319/

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