Utilizzando boost :: peso mosca struct all'interno T {} (cioè, pesi piuma ricorsive)
-
12-10-2019 - |
Domanda
Sto cercando di definire un file-path tipo di valore immutabili, approfittando di boost :: pesi mosca ai componenti percorso di condivisione. Qualcosa di simile a questo:
struct filepath_data;
typedef boost::flyweight<filepath_data> filepath;
struct filepath_data {
boost::optional<filepath> parent;
std::string name;
};
Naturalmente, questo appare come una struttura ricorsiva, ma in realtà non boost::flyweight<T>
(a sua volta) contenere una copia di T
, solo un handle a un T
, che possono essere consultati nel supporto del caso, quindi penso che questa struttura dovrebbe lavoro.
Purtroppo, non si compila, perché quando g ++ colpisce il typedef si lamenta che filepath_data è incompleto.
Quindi, la domanda è: posso usufruire della flessibilità e argomenti di template più avanzate per boost::flyweight<>
per fare questo lavoro la struttura, e se sì, come?
Soluzione
Questo esempio mostra come combinare Boost.Flyweight con un ricorsivo struttura di dati utilizzando Boost.Variant e boost::recursive_wrapper
. Forse si può utilizzare un approccio simile per il vostro problema.