我阅读了很多有关 ODB 框架的内容,但遗憾的是由于许可证问题无法实现它。
我想要一个代表表的类。当我的应用程序启动时,我想调用此函数:Init()
-> 它将连接到数据库,以及另一个函数:createTables()
-> 它将创建表。
有没有一种方法可以以某种方式“注册”到一个类,该类将包括我所有应该映射到 mySql 表的类?
我的想法是创建该类,并在其构造函数中将参数传递给另一个类,该类稍后将创建所有表。
例如:
CalssA_Table
{
String name;
Int age;
}
c'tor
{
RegistrationClass.AddNewTableToCreate("CalssA_Table","String","Int");
}
有人可以建议吗?是个好主意吗?有更好的吗? 其他实现方式?
谢谢!
最佳答案
您可以在静态初始化时使用全局信号并注册数据库初始化函数。这样,您就可以在连接到数据库后通过发出信号来调用这些函数。
/// Static initialization of classes.
template <typename Class>
class Initializer
{
public:
/// Call the static member function Class::initialize()
Initializer() {
Class::initialize();
}
};
// A 'boost signal' or a 'sigc++ signal' or, ...
Signal& signal_database_initialize() {
static Signal result;
return result;
}
// A class interacting with a database
class Table
{
private:
friend class Initializer<Table>;
static void initialize();
};
// In a translation unit
void database_initialize_table() {
// create tables
}
Initializer<Table> table_initializer;
void Table::initialize() {
signal_database_initialize().connect(&database_initialize_table);
}
// Invoke initialization at runtime:
int main() {
// Connect to a database
// ...
// Initialize database tables:
signal_database_initialize().emit();
}
注意:此处未指定信号类型。这取决于您选择的库。
关于c++ - 将类映射到 mySql 表,而不在 cpp 中使用 ODB 或其他框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382974/