たぶん、私が見ていないこれを回避する簡単な方法があるので、誰かが私にそれを説明できることを願っています。
私がクラスを持っているとしましょう:
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);
};
これらのオブジェクトへの参照は数百万になる可能性があり、実際には大量のデータが含まれているため、boost::flyweight
これらのオブジェクトを処理するために使用したいと思います。A
それらは一緒にハッシュされname
ますfileName
。
これを機能させるには何が必要ですか?結果のクラスboost::flyweight
を呼び出しAReader.readObject
てハッシュ/保存する必要があります。A
AReader
フルファクトリになり、カスタムファクトリとして使用する必要がありますか?または、フライウェイトでデフォルトのファクトリを使用し、インスタンスをフライウェイトの何かへの引数にすることによって、インスタンスAReader
を生成するために使用することは可能ですかA
(ファクトリに必要なストレージパターン全体を実装するのではなく) ?AReader
またはconst
、2番目のクラスに頼ることなく、外部データソースからパブリック変数を取得することは可能ですか(つまり、一度設定すると変更されません)?
編集
Boostを使用しない他の提案も受け付けています。私は確かにフライ級の独自の実装、またはより適している場合は他のパターンを書くことができます。しかし、私がすでに存在するものを使用できるのであれば、それが最善でしょう。いつものように、締め切りが短いので、私が書く必要のあるコードの量を最小限に抑えるものは何でも。