Forward-Declaring verschacheltes Template
-
Hi,
Ja, Frage steht im Titel, wie geht das?
Ich habe bereits herausgefunden, dass man gerne eine Extraheader mit Forwards für alle Templates anlegt. Aber ich bin über die Syntax unsicher.
// A.h // Header mit Template-Definition template<typename AImpl> class A {}; template<bool x> class B {}; typedef A<B<true>> A1; typedef A<B<false>> A2;// someFunc.h // Hier in einem anderen Header will ich A1 nutzen, aber erst in der .cpp // die Implementierung bekannt machen #include "Forwards.h" void someFunc(const A1& a1);// Forwards.h: template<typename> class A; template<bool> class B; typedef A<B<true>> A1; typedef A<B<false>> A2;// someFunc.cpp #include "someFunc.h" #include "A.h" void someFunc(const A1& a1) // jetzt darf A gern definiert sein { // impl }Ist das in Forwards.h okay und so üblich? Oder wie macht man das? (soll unter MSVC10 laufen, aber wenn es mit C++11 und using besser geht, würde mich das als Bonusinfo auch interessieren)
Danke im Voraus

-
Ich würde mich da nach <iosfwd> orientieren. So sparst du dir die doppelten typedefs.
// eisfwd.h: template<typename> class A; template<bool> class B; typedef A<B<true>> A1; typedef A<B<false>> A2;// eisimpl.hpp template<typename AImpl> class A {}; template<bool x> class B {};// eis.h #include "eisfwd.h" #include "eisimpl.hpp"// someFunc.h #include "eisfwd.h" void someFunc(const A1& a1);// someFunc.cpp #include "someFunc.h" #include "eis.h" void someFunc(const A1& a1) // jetzt darf A gern definiert sein { // impl }
-
Ah okay, also ein Header mehr zugunsten weniger typedefs. Gefällt mir, danke!
-
eisimpl.hppbraucht man nicht, man kann den Inhalt genau so gut gleich nacheis.hmit reinziehen.Bzw. von Eisflammes Version ausgehend...
Lösch dietypedefs ausA.hraus und mach statt dessen inA.hein#include "Forwards.h".
-
Stimmt! Danke