也许有一个简单的方法可以解决这个问题,我没有看到,所以希望有人能向我解释。配重和外部数据源的Flyweights
比方说,我有一个类:
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
实例成为flyweight中的某个参数的参数?或者是否有可能从外部数据源获取const
公共变量(即一旦设置,它们不会改变),而不诉诸第二类?
编辑
我也开不使用Boost其他建议。我当然可以编写我自己的轻量级实现,或者更适合的其他模式。但是如果我可以使用已经存在的东西,那最好。无论如何最小化我需要编写的代码量,因为与往常一样,截止日期很短。
这需要做什么才能将'A'变成flyweight(键提取器而不是可分配的),但是使用生成'A'的辅助类的唯一方法是使它成为flyweight使用的完整工厂(实现存储和其他所需的方法)? – tpg2114 2012-01-14 11:47:18