也许有一个我没有看到的简单方法,所以希望有人可以向我解释。
假设我有一堂课:
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
从外部数据源获取公共变量(即一旦设置,它们就不会改变)而不求助于第二类?
编辑
我也愿意接受其他不使用 Boost 的建议。我当然可以编写自己的轻量级实现,或者如果有更适合的任何其他模式。但是,如果我可以使用已经存在的东西,那将是最好的。无论什么都能最大限度地减少我需要编写的代码量,因为与往常一样,截止日期很短。