With std::is_base_of<A,B>::value
可以檢查類A
是否爲基類 類B
。 是否有可能向編譯器查詢類 B
的所有基類,例如,類似base_classes_of<B>
的東西返回包含所有基類B
的std ::元組?如何在編譯時查詢類的所有基類?
是否有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() {}
不是真的有效。一個元組存儲各種類型的值,而不是類型本身。 – 2011-03-12 07:26:56
@Bo Persson我的意思是**元組類型**,當然。元組類型只存儲類型的序列。上面的代碼工作正常,如果你用'std :: tuple '手工填寫'B_bases'。 – Lars 2011-03-12 08:29:30
好吧,但這需要基類是具有默認構造函數的具體類。我認爲這裏會有很多角落案例。 :-( – 2011-03-12 08:38:49