在类型树中查找最近的"ancestor"



我通过以下方式形成一个类型的"树":

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 的路上的下一个可访问叶子)

如果我问的没有意义,请告诉我。

我想我想通了。

假设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;
};

最新更新