2つのタイプ(1つまたは0の基本クラスを持つ)の共通の祖先が存在する場合、それを検出する必要があるという問題があります。この問題を解決するために型特性を構築することは可能ですか?コード内:
template<typename T1, typename T2>
struct closest_common_ancestor
{
typedef XXX type; // what goes here?
};
次のタイプが与えられます:
struct root {};
struct child1 : root {};
struct child2 : root {};
struct child3 : child2 {};
struct unrelated {};
closest_common_ancestor
次のタイプになります。
closest_common_ancestor<root, child1>::type == root
closest_common_ancestor<child1, child2>::type == root
closest_common_ancestor<child3, child1>::type == root
closest_common_ancestor<child3, child2>::type == child2
closest_common_ancestor<unrelated, child1>::type == error
型に基本クラスが0か1か、もしそうならその型の名前を調べることができれば、この問題を解決できると思います。これは可能ですか?