2011-02-07 102 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毕竟)。除了可扩展性类型的数量之外,我没有看到您的方法有任何特殊的缺点。