【问题标题】:C++/sqlite wrapper for dead-easy class serialization?用于简单类序列化的 C++/sqlite 包装器?
【发布时间】:2011-02-26 00:37:34
【问题描述】:

我正在寻找一个允许类的准透明序列化和反序列化的 OO sqlite C++ 包装器。

我想到的工作流程如下:

  1. 用数据成员定义一个类记录
  2. 将此类提供给创建合适表的包装器

通过>对整个类进行简单的序列化和反序列化。

这是现实的还是我必须自己编写运算符?理想情况下,我不想担心数据如何进入数据库以及如何存储......我主要关心的是易用性,而不是灵活性或性能。

我正在寻找类似GAE datastore python interface 的东西。

非常感谢, 阿里克

【问题讨论】:

    标签: c++ sqlite serialization deserialization


    【解决方案1】:

    没有简单的 C++ ORM(对象关系映射)工具。我所知道的可以简化流程的两个库是:

    SOCI 更简单,在哲学上类似于 boost,而 debea 更面向 ORM。

    顺便说一句,如果SQLite/SQL/requests不是强制性的,可以使用Boost serialization framework

    只要我的两分钱

    编辑:

    好吧,鉴于几乎不存在 C++ 反射的可能性,我的拙见是,做你想做的事情的唯一方法是使用代码生成器。鉴于没有像样的、易于使用的 C++ 解析器/词法分析器/...,我知道没有一个广泛使用的工具可以做到这一点。

    我认识的一个人多年来一直有同样的问题。他终于找到了解决方案:他告诉我 clang 现在可以使用(它编译 boost),并且他使用它来根据代码中的标记生成序列化代码(他告诉我 TR1 中支持标记,但我不是专家)。这是很有价值的反馈,我自己在这个领域的尝试让我同意这个解决方案。

    【讨论】:

    • 我知道 SOCI,但让我不屑一顾的是 ORM 必须明确编程。我看到这提供了很大的灵活性,但是对于具有简单数据类型的类,我觉得这应该是自动化的。 Debea 非常有趣,即使不是完全透明。我将把这个问题留待一段时间,看看是否还有其他问题-
    • 查看我的编辑。永远找不到合适的解决方案。代码生成似乎是你最好的方法......祝你好运!
    • @neuro 永远不要说永远! quince-lib.com 表明,无需反思和代码生成,您可以走得比您想象的更远。
    • @slyqualin:嗯,我认为你的库当时并不存在。我没有提到宏作为一种可能的解决方案,你是对的,你的库似乎回答了这个问题。我会看一看。无论如何,这是一份相当不错的工作:)
    • 正如 boost 本身所显示的那样,即使在使用 RTTI 等运行时的东西之前,很多事情都可能发生在编译时。利用 C++11 和模板元编程的现代 ORM 库会走得很远。在那之前,quince-lib 看起来是最有前途的。
    【解决方案2】:

    Quince 是一个库,几乎可以满足提问者的要求。见quince-lib.com

    (完全披露:我写的。)

    【讨论】:

      【解决方案3】:

      这个问题是不久前提出的。从那时起,Hiberlite 得到了开发,并声称几乎完全符合您的要求。

      它不支持使用 > 进行读/写(Boost.serialization 支持,正如其他人所提到的,但它不存储在 SQL DB 中);但是,使用它似乎很容易。

      【讨论】:

        【解决方案4】:

        试试 sqlite_orm https://github.com/fnc12/sqlite_orm 。它提供了你所需要的——将一个类映射到一个表,将类成员映射到列

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-12
          • 2020-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-18
          • 1970-01-01
          相关资源
          最近更新 更多