在C++中有一種模組設計的技巧叫做handle class,其宗旨就是要讓封裝的特性更強烈。只提供一個handle來控制這個物件,其他所有資料均不開放。而在C語言裡面,要怎麼弄出一個handle clasee呢?我在此提供我的方法:
1. 首先我的習慣是一個.c檔配一個.h檔,而這一組就是相當於一個class,相信很多人也都這樣做。
2. 所有的Globol variable與private function都使用static宣告,讓其他.c無法使用,也避免掉重複宣告的困擾。
3. 在.h檔裡面增加define如下
////////////////////test.h/////////////////////////
#ifdef TEST_C
struct{
int a;
int b;
int c;
}test
#else
void test_hanle;
#endif
extern void test_init( struct test *test_handle);
/////////////////////////////////////////////////////
如此一來只要在test.c裡面宣告#define TEST_C就可以讓tset.c只看到他自己的成員們,但是別的.c檔想要來#include "test.h"的時候,就只能看到test這個模組釋放出來的函式,以及一個handle---void test_hanlde,那所有的function都可以設計成必須要傳入test_handle 才能使用這個模組。
如果test.c裡面有修改到什麼實作細節,也不會影響到include "test.h"的上層程式。因為其他的.c檔,只會參考到test.h裡面的void teset_handle而已。所以編譯的時候,只會編到test.c為止。
沒有留言:
張貼留言