2011-02-07 45 views
0

我正在開發使用ODBC進行數據訪問的傳統C++應用程序。來自C#背景,我真的很想念ADO風格的數據訪問。我正在寫一個包裝(因爲我們實際上不能使用ADO)來使我們的數據訪問變得不那麼痛苦。這意味着沒有char數組,沒有手動文本blob流,也沒有聲明列綁定。從C++函數中返回一個靈活的數據類型

我正在努力如何存儲/返回數據值。在C#中,至少可以聲明一個object並將其轉換爲任何內容(只要該類型是可轉換的)。

我目前的C++解決方案是使用boost::any將數據值存儲在自定義的DataColumnValue對象中。這個類有轉換和賦值運算符到我們的應用程序中使用的各種類型(超過10)。這裏有一點複雜,因爲如果您在boost::any中存儲int並嘗試boost::any_cast<long>,您將獲得boost::bad_any_cast。客戶端對象不應該知道值是如何存儲在內部的。

有沒有人有任何經驗試圖存儲/返回其類型只在運行時知道的值?有更好的/更清潔的方式嗎?

+3

這看起來好像在SO上會問得更好。 – 2011-02-07 23:24:33

+0

你能解釋一下爲什麼?這個網站關於如果沒有編程相關的問題是什麼? – 2011-02-08 00:03:20

回答

1

我在當天的某些一次性項目中使用了OTL(http://otl.sourceforge.net/),用於連接C++和一些SQL Server數據庫。它是基於流的,所以它可以爲你做類型轉換。我確實發現流模式有時會有點混亂,因爲我不得不按照查詢順序對數據流進行解析 - 我從來都不知道如何從記錄流中提取命名值。

但它完美地工作,否則。


關於Boost.Any,我已經實現了類似的結構,將COM Variant複製爲C++聯合。隨着Boost.Variant /任何你可能需要添加額外的模板專門化,以支持你正在嘗試的特定數據類型轉換(long不是int畢竟)。除了可擴展性類型的數量之外,我沒有看到您的方法有任何特殊的缺點。