簡體   English   中英

在編譯時檢查 class 是否在 C++ 中有任何基礎 class

[英]Check if the class has any base class in C++ in compile time

我想使用 C++ 中的類型實用程序檢查 class X是否具有任何基礎 class。

例如:

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 ,但它用於測試特定的基礎 class。

但正如這里提到的 GCC 有std::tr2::bases (和std::tr2::direct_bases )可以解決您對通用“有任何基礎”斷言的問題。 這些來自N2965 提案,不幸的是被 std 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM