2012-08-28 10 views
7

Ich habe Probleme mit zirkulären Abhängigkeit in einer Templat-Klasse. Es ist ein Codebeispiel:C++ - zirkuläre Abhängigkeit (mit innerem Typ der Unterklasse in Templated Basisklasse)

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

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

Wenn ich versuche, B zu instanziiert, erhalte ich einen Compiler-Fehler: ‚C‘ ist kein Mitglied von ‚B‘ (MSVC) oder Ungültige Verwendung von unvollständigem Typ " Struktur B ' (GCC).
Was ist der beste Weg, um das Muster zu ändern, um es zu arbeiten?

+3

Sie können nicht. Geben Sie ein etwas vollständigeres Beispiel für das Problem an, das Sie zu lösen versuchen, und wir können uns den Refactoring des Codes ansehen. –

Antwort

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

Kann nicht hilfreich sein, wenn 'A' eine CRTP-Vorlage ist, die den Parametertyp' T' in Elementdeklarationen eingibt. In diesem Fall müssen Sie wahrscheinlich "C" als zusätzlichen Template-Parameter definieren. – aschepler