我想使用 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不幸的是rejected对于标准 C++。
下面是一个示例代码,展示了如何使用此 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/