我有一個問題,我需要發現兩種類型(具有一個或零基類)的共同祖先,如果它存在。是否有可能建立一個類型特徵來解決這個問題?在代碼:如何在編譯時推斷兩種類型共有的繼承樹的根(如果存在)?
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塊來實現) –
如果有2個根root1和root2,child1繼承child2 ('struct child1:root1,root2 {};'),那麼'nearest_common_ancestor'將會返回什麼。 – kennytm