将 odb 编译指示移到 class header 之外

Moving odb pragmas outside class header

是否可以将 odb(c++ orm 类框架)编译指示移出 class header? 例如我只用 id 定义 class basic_object (抽象):

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

然后在另一个文件

中为那个class创建编译指示
#pragma db object(basic_object) abstract
#pragma db member(basic_object::_id) get(get_id) set(set_id) id auto

是的,你可以,它叫做 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 编译器的参数。


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

解决这个问题

声明它 public

通过将 odb access class 添加为您的 class 中的好友:

private:
friend class odb::access;