2012-12-17 22 views

回答

5

可能是因爲機制太「機械」,太多以至於在多態性被認爲是有用的意義上它停止有用。

另外,因爲在事實之後沒有簡單的方法來擴展多態函數。

在C++中,你可以平凡做到這一點:

Matrix4x4 a, b, c; 

a = ...; /* Initialize matrices. */ 
b = ...; 
c = a + b; /* Use overloaded (polymorphic) operator + to add. */ 

在C++中,上述使用在Matrix4x4類中定義的operator+(),並且能夠確定在編譯時。因此,添加新數據類型時,會添加描述如何執行添加的相關代碼,並重新使用現有的+名稱。在C中,你不能那樣做。

用C

,即使你有一個功能

void super_add(void *sum, const void *a, const void *b); 

你怎麼告訴它Matrix,如果你剛剛編寫的類型?你就必須有一些通用的類型描述系統:

void super_add(const char *sum_type, void *sum, const char *atype, void *a, const char *btype, const void *b); 

,你就必須提供某種形式的註冊,機構,這樣你就可以增加新的功能:

void super_add_register(const char *sum_type, const char *atype, const char *btype, void (*adder)(void *sum, const void *a, const void *b)); 

那麼你」 d必須實現代碼來將類型名稱與正確的添加函數進行匹配,並且繼續。

總之,這並不值得。但請注意,有許多庫都會執行很多操作,例如GObject

相關問題