Возможно, есть простой способ обойти это, чего я не вижу, поэтому, надеюсь, кто-нибудь может объяснить это мне.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
стать полным заводом и использовать его как изготовленную на заказ фабрику? Или можно использовать завод по умолчанию в мухи и каким-то образом использовать AReader
для генерации экземпляров A
(в отличие от реализации всего шаблона хранения, требуемого на заводе), возможно, сделав пример аргументом в чем-то в мухи? Или можно получить общедоступные переменные const
(т. Е. Когда они установлены, они не меняются) из внешнего источника данных, не прибегая к второму классу?
Редактировать
Я также открыт для других предложений не используя Boost. Я могу, конечно, написать свою собственную реализацию мухи или любой другой шаблон, если он лучше подходит. Но если я могу использовать то, что уже существует, это было бы лучше. Что бы ни уменьшало количество кода, которое мне нужно написать, потому что, как всегда, короткие сроки.
Это то, что нужно сделать, чтобы получить 'A' в мухи (ключ-экстрактор, а не назначаемый), но это единственный способ использовать вспомогательный класс, который генерирует' A' для сделать его полномасштабной фабрикой, которая будет использоваться мухой (для реализации хранения и других методов)? – tpg2114