Template Zirkelbezug(?)
-
Hallo Forum,
gegeben sind folgende Beispielklassen:template <typename... TBars> class Foo; template <typename T> class IBar { protected: // IBar(Foo&) {} }; template <typename... TBars> class Foo { public: std::tuple<TBars...> bars; }; class BarOne final : public IBar<int> { public: // BarOne(Foo&) {} // ... };
Wie in den Kommentaren bereits angedeutet, benötigt jede Bar-Klasse eine Referenz zum Foo-Container.
Dies stellt sich jedoch als schwerer als gedacht heraus, da in diesem Beispiel BarOne nicht den Typ von Foo kennt und ich so keine Referenz im Konstruktor verlangen kann. Auch über eine Interfaceklasse für Foo funktioniert das Ganze nicht, da BarOne keinen Zugriff auf das Tuple hat ohne den Typ von Foo zu kennen.
Kann mir irgendwer helfen, dieses, wenn auch nicht ganz professionell beschriebene, Problem zu lösen ?
-
MSVC (2015) schluckt den Code fast 1 zu 1. Das was fehlt sind die Template Argumente in Zeile 8 und 22.
-
Ja das Problem ist, Bar "weis nicht in welchem Foo es sich befindet" und wenn ich
template <typename T, typename... TBars> class IBar { protected: IBar(Foo<TBars...>& foo) {} }
verwenden möchte, dann geht das auch nicht, da ich ja nicht den Typ selbst als Templateargument für sich selbst verwenden kann (oder?).
-
Hä? Wieso das denn nicht?