2012-07-08 76 views
1

是否有一个C++库提供SQL语法来基于其Getters/Properties过滤/查询特定对象?我正在寻找类似于http://www.thomasfrank.se/sqlike.html(即JS/AS)的东西,但用C++编写。要求是crossplattform,轻量级和(不是必须的),但希望不使用提升。类似于sql语法的C++对象过滤器引擎

E.g.我为我的C++代码实现了一个脚本引擎 - 我的脚本可以向我的C++对象添加回调。现在,而不是为每个对象(actor)编写脚本,我希望将它应用于基于过滤器的所有对象。

所以在我的剧本我会碰到这样的

manager:AddListener("select name="SomeName" and age > 10 or weight < 10",SomeEvent,MyScriptFunc) 

当创建一个新的对象,我会翻阅所有的听众 - 如果此对象的属性相匹配的配置之一,我将其添加(如对象有属性名称= somename和年龄高于10)

目前我只是通过一个唯一的标识符(ID)来识别我的对象 - 但我想要更灵活,当我将相同的事件侦听器应用于类似的对象。

所以基本上,如果有一个库文件从一些字符串查询中创建一个过滤器对象,那已经足够了。

回答

1

您可以尝试SQLite

SQLite是实现了一个自包含的,无服务器,零配置,事务性的SQL数据库引擎的软件库。 SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite的源代码处于公有领域。

您可以创建一个内存数据库来保存C++对象的属性,您要查询有关:

sqlite3_open(":memory:", &db); 

然后你可以使用One-Step Query Execution Interface实际执行查询。

要填充数据库,您可以使用IDL来描述您的对象,并且您的IDL解析器将创建C++接口头文件和用于填充数据库的代码。

+1

这是完全不同的东西 - SQLite就像mysql或postgres-它只是写入文件并存储正常的表数据等 - 即时通讯仅查找查询引擎 - 不是数据库存储! – Steve 2012-07-08 16:45:06

+0

@Steve:我已经更新了答案。问候 – jxh 2012-07-08 16:51:50

+1

没有 - 它需要一个数据库连接 - 相信我,sqlite没有什么接近什么即时通讯寻找 - 我曾与sqlite之前 – Steve 2012-07-08 18:24:31