2012-08-28 75 views
7

我遇到了模板類中的循環依賴問題。有一個代碼示例:循環依賴(在模板化基類中使用內部類型的子類)

template <typename T> struct A 
{ 
    typedef typename T::C D; 
    //typename T::C c; 
}; 

struct B : public A<B> 
{ 
    struct C {}; 
}; 

當我嘗試實例B,I得到一個編譯錯誤:「C」不是「B」(MSVC)或無效使用不完整的類型的'的一個成員結構B'(GCC)。
更改樣本以使其起作用的最佳方法是什麼?

+3

你不能。提供你想要解決的問題的一個更完整的例子,我們可以看看重構代碼。 –

回答

6
struct B_base { struct C {}; }; 
strucr B : A<B_base>, B_base { }; 
+0

如果'A'是一個將參數類型爲'T'的CRTP模板放入成員聲明中,可能不會有幫助。在這種情況下,你可能只需要將'C'作爲一個額外的模板參數。 – aschepler