多分、私は見ていないこの周りに簡単な方法があるので、誰かがそれを私に説明できることを願っています。ブーストと外部データソースを備えたフライウェイト
のは、私はクラスがあるとしましょう:
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) {};
};
そして、そのクラスの発電機がある:潜在的に数百万人が存在しますので、
class AReader {
public:
ifstream dataFile;
AReader(const std::string filename);
A* readObject(const std::string objectName);
};
私はこれらのA
オブジェクトを処理するためにboost::flyweight
を使用したいです実際には多くのデータが含まれています。それらはname
とfileName
に一緒にハッシュされます。
この作品を制作するには何が必要ですか?私はboost::flyweight
がAReader.readObject
を呼び出し、結果のA
クラスをハッシュ/ストアする必要があります。
AReader
はフル工場になり、カスタム工場として使用する必要がありますか?あるいは、フライウェイトのデフォルトファクトリを使用して、AReader
インスタンスを生成してAReader
インスタンスをフライウェイトのインスタンスの引数にすることで、A
インスタンスを生成できますか?または、第2のクラスに頼らずに外部データソースから公開変数(一度設定しても変更されない)を取得することは可能ですか?
編集
私はまた、ブーストを使用していない他の提案に開いています。私は確かに自分自身のフライウェイトの実装を書くことができます、または他のパターンは、より適している場合。しかし、すでに存在しているものを使うことができれば、それが一番良いでしょう。いつものように、デッドラインは短いので、書く必要のあるコードの量を最小限に抑えます。
フライウェイト(アサイナブルではなくキー抽出器)に 'A 'を得るために必要なことを処理しますが、' A'を生成するヘルパークラスを使用する唯一の方法ですそれをフライウェイトが使用する完全な工場にする(必要なストレージや他の方法を実装する)? – tpg2114