Vorwärtsdeklaration
-
Hallo,
wie kann ich Folgendes am geschicktesten realisieren?
struct Key { /* ... */ }; struct T { int a, b, c; map_type::pointer p; // <-- geht logischerweise nicht, // da map_type ja noch nicht bekannt ist. }; typedef boost::unordered_map<Key, T> map_type;Was ich also bräuchte, wäre eine Art Vorwärtsdeklaration für
map_type::pointer.Grüße
-
Oder du machst eine Vorwärtsdeklaration für deine Klassen:
struct Key; struct T; typedef boost::unordered_map<Key, T> map_type; struct Key { /* ... */ }; struct T { int a, b, c; map_type::pointer p; // <-- geht logischerweise jetzt schon :D };Sollte gehen.
-
Danke, aber woher weiß ich/du, dass für
typedef boost::unordered_map<Key, T> map_type;die Template-Argumente
TundKeynicht vollständig bekannt sein müssen?
-
Bloops schrieb:
Danke, aber woher weiß ich/du, dass für
typedef boost::unordered_map<Key, T> map_type;die Template-Argumente
TundKeynicht vollständig bekannt sein müssen?Dein typedef muss nur wissen, dass es die Klassen gibt. Ihm ist egal, was genau die Klassen sind. Wobei
map_type::pointer p;bei der Variablen Deklaration der Compiler genau wissen muss, was das ist.
-
kralo9 schrieb:
Wobei
map_type::pointer p;bei der Variablen Deklaration der Compiler genau wissen muss, was das ist.
Naja, genau ist leider etwas ungenau...
boost::unordered_map unterstützt die hier nötige Instanziierung mit T, das zu diesem Zeitpunkt noch ein "incomplete Type" ist. (http://www.boost.org/doc/libs/1_50_0/doc/html/unordered/changes.html#unordered.changes.boost_1_42_0)
Schwein gehabt!

-
Fredderick schrieb:
Schwein gehabt!

Nein, alles Berechnung
