具有Boost和外部数据源的Flyweights

tpg*_*114 7 c++ boost flyweight-pattern boost-flyweight

也许有一个简单的方法,我没有看到,所以希望有人可以向我解释.

假设我有一节课:

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) {}; 
};
Run Code Online (Sandbox Code Playgroud)

那个类的生成器是:

class AReader {
public:
  ifstream dataFile;
  AReader(const std::string filename);
  A* readObject(const std::string objectName);
};
Run Code Online (Sandbox Code Playgroud)

我想boost::flyweight用来处理这些A对象,因为它们可能有数百万个引用,实际上它们包含大量数据.他们将在哈希namefileName在一起.

我需要做什么才能做到这一点?我需要boost::flyweight调用AReader.readObject并散列/存储生成的A类.

是否AReader需要成为一个完整的工厂并用作定制工厂?或者是否可以使用flyweight中的默认工厂并以某种方式用于AReader生成A实例(而不是实现工厂所需的整个存储模式),可能通过使AReader实例成为flyweight中的某个参数?或者是否可以const从外部数据源获取公共变量(即,一旦设置,它们不会更改)而无需诉诸第二类?

编辑

我也对不使用Boost的其他建议持开放态度.我当然可以编写我自己的flyweight实现,或任何其他模式,如果一个更适合.但如果我可以使用已经存在的东西,那将是最好的.无论什么最小化我需要编写的代码量,因为一如既往,截止日期很短.

Die*_*ühl 1

我没有使用过 Boost::flyweight,但从它的外观来看,至少关键需要是Assignable(除了 isEqualityComparableHashable)。与您的const成员您键入显然不是 AssignableAssignable从表面上看,如果你有钥匙提取器,你就不必做它。使用密钥提取器只需要密钥Assignable