我正在通過以下方式形成型別的“樹”:
template <typename T, typename PARENT, typename ... CHILDREN>
class Node {};
class X;
class A;
class AA;
class AB;
class B;
class BA;
class BB;
class X : public Node<X, void, A, B> {};
class A : public Node<A, X, AA, AB> {};
class AA : public Node<AA, A> {};
class AB : public Node<AB, A> {};
class B : public Node<B, X, BA, BB> {};
class BA : public Node<BA, B> {};
class BB : public Node<BB, B> {};
我需要撰寫一個“特征”型別,以便我可以從 Node 基類中獲取給定CHILDREN...的“最近的祖先”。PARENT例如
nearest_ancestor<X, BB>::type應該是B(因為 B 是從 X 到“BB”的下一個可訪問的葉子)
如果我的要求沒有意義,請告訴我。
uj5u.com熱心網友回復:
我想我想通了。
假設Node基類具有以下內容:
template <typename T, typename PARENT, typename ... CHILDREN>
class Node {
using parent_type = PARENT;
};
那么nearest_ancestor可以定義為:
template <typename T, typename U, typename ENABLE = void>
struct nearest_ancestor {
using type = typename nearest_ancestor<T, typename U::parent_type>::type;
};
template <typename T, typename U>
struct nearest_ancestor<T, U, std::enable_if_t<std::is_same_v<T, typename U::parent_type>>> {
using type = U;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518283.html
標籤:C 模板
