gpt4 book ai didi

c++ - 从库中公开 API 的最佳方式

转载 作者:行者123 更新时间:2023-11-30 03:05:22 24 4
gpt4 key购买 nike

我正在设计一个 Win32 库来解析文件的内容(列和值)并将其内部存储在数据结构(映射)中。现在我需要公开 API,以便消费者可以调用这些 API 来获取结果。

文件可能有不同的格式,例如 FM1、FM2 等。消费者可能会这样查询

FM1Provider.GetRecords("XYZ");
FM2Provider.GetRecords("XYZ");

我打算做的是拥有一个 CParser 类来执行所有解析并公开该类。

CParser
{
bool LoadFile(string strFile);
Map<string,string> GetFM1Records(string key);
Map<string,string> GetFM1Records(string key);
};

   class CResultProvider
{
virtual Map<string,string> GetRecords(string key)=0;
}

class CFM1ResultProvider : public CResultProvider
{
Map<string,string> GetRecords(string key);
}

class CFM2ResultProvider : public CResultProvider
{
Map<string,string> GetRecords(string key);
}

CParser
{
bool LoadFile(string strFile);
CResultProvider GetFM1ResultProvider();
CResultProvider GetFM1ResultProvider();
};

考虑到我正在开发一个库,请建议我这些方法中哪一种是正确的和可扩展的。

最佳答案

您的组件似乎要处理两个问题:解析和存储。将它们分成不同的组件以便它们可以独立使用是一个很好的设计实践。

我建议您只为解析器提供已解析数据的回调。这样,它的用户可以为她的应用程序选择最合适的容器,或者可以选择应用和丢弃读取的数据而不存储。

例如:

namespace my_lib {

struct ParserCb {
virtual void on_column(std::string const& column) = 0;
virtual void on_value(std::string const& value) = 0;

protected:
~ParserCb() {} // no ownership through this interface
};

void parse(char const* filename, ParserCb& cb);

} // my_lib

顺便说一句,更喜欢使用命名空间而不是 prefixing your classes with C .

关于c++ - 从库中公开 API 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750362/

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