gpt4 book ai didi

c++ - 使用 Boost 和外部数据源的享元

转载 作者:可可西里 更新时间:2023-11-01 18:39:45 24 4
gpt4 key购买 nike

也许有一种我没有看到的解决此问题的简单方法,所以希望有人能向我解释一下。

假设我有一个类:

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 对象,因为它们可能有数百万个引用,实际上它们包含大量数据.它们将在 namefileName 上一起散列。

我需要什么来完成这项工作?我需要 boost::flyweight 来调用 AReader.readObject 并散列/存储生成的 A 类。

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

编辑

我也乐于接受其他不使用 Boost 的建议。我当然可以编写自己的轻量级实现,或者任何其他更适合的模式。但是,如果我可以使用已经存在的东西,那将是最好的。无论什么都能最大限度地减少我需要编写的代码量,因为一如既往,截止日期很短。

最佳答案

我没有使用过 Boost::flyweight 但从它的外观来看,至少关键需要是 Assignable (除了 EqualityComparable可散列)。对于您的 const 成员,您键入的显然不是 Assignable。从外观上看,如果您有 key 提取器,则不必将其设置为Assignable。使用 key 提取器,只有 key 需要是 Assignable

关于c++ - 使用 Boost 和外部数据源的享元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com