Mit boost :: Fliegengewicht innerhalb struct T {} (dh rekursiv Fliehgewichte)
-
12-10-2019 - |
Frage
Ich versuche, einen unveränderlichen Datei-Pfad Werttyp zu definieren, unter Ausnutzung von boost :: Fliegengewicht zu teilen Pfadkomponenten. So etwas wie folgt aus:
struct filepath_data;
typedef boost::flyweight<filepath_data> filepath;
struct filepath_data {
boost::optional<filepath> parent;
std::string name;
};
Natürlich, das sieht wie eine rekursive Struktur, aber boost::flyweight<T>
nicht wirklich (selbst) enthält eine Kopie T
, nur einen Punkt zu einem T
, die in dem entsprechenden Halter nachgeschlagen werden können, so denke ich, diese Struktur soll Arbeit.
Leider ist es nicht kompiliert werden, denn wenn g ++ trifft die typedef, dass filepath_data klagt unvollständig ist.
Also, die Frage ist, kann ich Nutzung der Flexibilität und erweiterte Vorlage Argumente für boost::flyweight<>
machen diese Struktur Arbeit zu machen, und wenn ja, wie?
Lösung
Dieses Beispiel zeigt, wie Boost.Flyweight kombinieren mit einer rekursiven Datenstruktur Boost.Variant und boost::recursive_wrapper
. Vielleicht können Sie einen ähnlichen Ansatz für Ihr Problem verwenden.