你可以使用一個簡單的版本,例如:
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