2012-07-08 35 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