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
对象,因为它们可能有数百万个引用,实际上它们包含大量数据.他们将在哈希name
和fileName
在一起.
我需要做什么才能做到这一点?我需要boost::flyweight
调用AReader.readObject
并散列/存储生成的A
类.
是否AReader
需要成为一个完整的工厂并用作定制工厂?或者是否可以使用flyweight中的默认工厂并以某种方式用于AReader
生成A
实例(而不是实现工厂所需的整个存储模式),可能通过使AReader
实例成为flyweight中的某个参数?或者是否可以const
从外部数据源获取公共变量(即,一旦设置,它们不会更改)而无需诉诸第二类?
编辑
我也对不使用Boost的其他建议持开放态度.我当然可以编写我自己的flyweight实现,或任何其他模式,如果一个更适合.但如果我可以使用已经存在的东西,那将是最好的.无论什么最小化我需要编写的代码量,因为一如既往,截止日期很短.
我没有使用过 Boost::flyweight,但从它的外观来看,至少关键需要是Assignable
(除了 isEqualityComparable
和Hashable
)。与您的const
成员您键入显然不是 Assignable
。Assignable
从表面上看,如果你有钥匙提取器,你就不必做它。使用密钥提取器只需要密钥Assignable
。
归档时间: |
|
查看次数: |
345 次 |
最近记录: |