Forse c'è un modo semplice per aggirare ciò che non vedo, quindi spero che qualcuno me lo possa spiegare.Flyweights con Boost e origini dati esterne
Diciamo che ho una classe:
class A {
public:
const double parameter;
const std::string name;
const std:: string fileName;
A(const double parameter, const std::string name, const std::string fileName) :
parameter(parameter), name(name), fileName(fileName) {};
};
e il generatore per la classe è:
class AReader {
public:
ifstream dataFile;
AReader(const std::string filename);
A* readObject(const std::string objectName);
};
Vorrei utilizzare boost::flyweight
per gestire questi A
oggetti perché ci saranno potenzialmente milioni di riferimenti a loro e in realtà contengono molti dati. Saranno sottoposti a hash su name
e fileName
insieme.
Cosa devo fare per funzionare? Ho bisogno dello boost::flyweight
per chiamare AReader.readObject
e dell'hash/memorizzare la classe A
risultante.
Il AReader
deve diventare una fabbrica completa e utilizzato come fabbrica personalizzata? Oppure è possibile utilizzare la fabbrica predefinita nel peso piuma e in qualche modo utilizzare AReader
per generare le istanze A
(anziché implementare l'intero modello di archiviazione richiesto dalla fabbrica), magari trasformando un'istanza AReader
in qualcosa nel peso piuma? Oppure è possibile ottenere variabili pubbliche const
(ad esempio una volta impostate, non cambiano) da un'origine dati esterna senza ricorrere a una seconda classe?
Modifica
Sono aperto anche ad altri suggerimenti che non utilizzano Boost. Posso certamente scrivere la mia implementazione di un peso mosca, o qualsiasi altro modello se uno è più adatto. Ma se posso usare qualcosa che esiste già, sarebbe meglio. Qualunque cosa minimizzi la quantità di codice che devo scrivere perché, come sempre, le scadenze sono brevi.
Che gestisce ciò che deve essere fatto per ottenere 'A' nel peso piuma (chiave estrattore piuttosto che assegnabile), ma è l'unico modo per usare una classe helper che genera' A' per trasformarlo in una fabbrica completa per essere utilizzata dal peso piuma (implementando lo spazio di archiviazione e altri metodi richiesti)? – tpg2114