Flyweights с Boost и внешними источниками данных

Возможно, есть простой способ обойти это, который я не вижу, так что надеюсь, кто-нибудь сможет мне его объяснить.

Допустим, у меня есть класс:

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 стать полноценной фабрикой и использоваться как пользовательская фабрика? Или можно использовать фабрику по умолчанию в flyweight и как-то использовать AReader для генерации экземпляров A (в отличие от реализации всего паттерна хранения, требуемого фабрикой), может быть, сделав экземпляр AReader аргументом для чего-то в flyweight? Или возможно ли получить const публичные переменные (т.е. после установки они не меняются) из внешнего источника данных, не прибегая к помощи второго класса?

Edit

Я также открыт для других предложений, не использующих Boost. Я, конечно, могу написать свою собственную реализацию flyweight, или любого другого паттерна, если он лучше подходит. Но если я могу использовать что-то уже существующее, это было бы лучше. Все, что минимизирует количество кода, который мне нужно написать, потому что, как всегда, сроки сжатые.

7
задан Viktor Dahl 3 December 2013 в 16:27
поделиться