你可以使用一个简单的版本,例如:
struct backend {
int (*insert)(...);
int (*remove)(...);
...
};
static struct backend db_backend = { db_insert, db_remove, ... };
static struct backend other_backend = { other_insert, other_remove, ... };
const struct backend *get_backend(enum backend_type type)
{
switch (type)
{
case DB_BACKEND:
return &db_backend;
case DB_OTHER:
return &db_other;
...
}
}
上述所有可以隐藏一个C文件中,与get_backend
和枚举公职。然后你可以使用它像这样:
struct backend *b = get_backend(DB_BACKEND);
b->insert(...);
b->remove(...);
许多细节丢失,当然(很多人喜欢使用typedef
,例如)。这是一个基本设置,如果您不喜欢b->insert(...)
语法,或者想要设置后端一次,然后在代码中使用insert()
和remove()
,则还可以创建包装函数。如果您已经有一些直接拨打insert()
的代码,并且您希望将呼叫转到右后端,这也很有用。
如果您想要更详细的解决方案,请查看http://www.cs.rit.edu/~ats/books/ooc.pdf。你不需要实现它的每一个细节,但它可以给你一些想法。
是功课吗? (通常的问题......) – jv42
不作业,工作。此外,我并不真正要求这里的代码,只是指针和建议等:-) – cnovice
这是你有什么麻烦?定义一个函数指针?定义一个结构?从指针调用函数?如何组织这一切? – Kevin