Имам проблем, при който трябва да открия общия предшественик на два типа (с един или нула базови класове), ако съществува. Възможно ли е да се изгради черта на типа, за да се реши този проблем? В код:
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
Вярвам, че мога да разреша този проблем, ако мога да проверя дали даден тип има нула или един базов клас и ако е така, името на този тип. Възможно ли е това?
is_base_of
може да се приложи по отношение на основни C++03 блокове) - person Matthieu M.   schedule 03.11.2011root1
иroot2
иchild1
,child2
ги наследяват и двата (struct child1 : root1, root2 {};
), заclosest_common_ancestor
ще бъде двусмислено какво да върне. - person kennytm   schedule 04.11.2011