将 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;
是否可以将 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;