Может быть, есть простой способ обойти это, что я не вижу, так что, надеюсь, кто-нибудь сможет мне это объяснить.
Допустим, у меня есть класс:
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. Я, конечно, могу написать свою собственную реализацию навесного веса или любой другой шаблон, если он лучше подходит. Но если бы я мог использовать то, что уже существует, это было бы лучше всего. Что бы ни сводило к минимуму объем кода, который мне нужно написать, потому что, как всегда, сроки являются короткими.