【问题标题】:Moving odb pragmas outside class header将 odb 编译指示移到类头之外
【发布时间】:2015-11-16 22:53:54
【问题描述】:

将 odb (c++ orm like framework) 编译指示移到类头之外的方法吗? 例如,我只定义了 id 类 basic_object (abstract):

class basic_object  {
   int _id;
public:
    int get_id() const;
    void set_id(int _id);
};

然后在另一个文件中为该类创建编译指示

#pragma db object(basic_object) abstract
#pragma db member(basic_object::_id) get(get_id) set(set_id) id auto

【问题讨论】:

    标签: c++ odb


    【解决方案1】:

    是的,你可以,它被称为 named pragmas

    在你的其他文件中你必须写

    #pragma db object(basic_object)
    #pragma db member(basic_object::_id) id
    

    然后你必须告诉 odb 编译器去哪里寻找。您可以通过添加来做到这一点

    #ifdef ODB_COMPILER
    #include "other_file.hxx"
    #endif
    

    到您的原始文件 通过使用

    --odb-epilogue '#include "other_file.hxx"'

    作为 odb 编译器的参数。


    但是在您给出的示例类basic_object 中存在一个问题:您的数据字段_id 是私有的。您可以通过

    解决此问题

    公开

    通过将 odb 访问类添加为您的类中的朋友:

    private:
    friend class odb::access; 
    

    【讨论】:

    • 感谢您的回答!现在我已经解决了问题,但忘了添加自己的主题解决方案(除了你的答案,我想说不一定要公开_id或添加朋友类。最新版本的ODB编译器能够解析/使用你的公共获取器和设置器(如果它们符合通用样式),或者您可以添加自己的正则表达式来查找它们
    • @Dcow 很高兴知道谢谢(我猜他们在邮件列表上说过这个?手册中没有阅读)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多