在某些(或許是錯誤)設計中會在基類中定義成員函數(shù)指針數(shù)組(或其他容器)
然后派生類對其(用派生類的成員函數(shù))進行初始化。
外部進行任務分配時,進入基類接口,查詢對應的成員函數(shù)指針,然后以此路由到具體的派生類中。
但這樣有一個問題:派生類必須優(yōu)先(第一個)繼承這個基類。
因為基類中調(diào)用成員函數(shù)時傳遞的是基類this地址,而派生類的成員函數(shù)的(匯編)實現(xiàn),是直接把傳入的地址認為是(派生類)的起始地址。
那么當派生類不是第一個繼承這個基類時,數(shù)據(jù)就會錯位。當然:虛函數(shù)作為成員函數(shù)時是沒有問題的,還是會保持虛函數(shù)的多態(tài)能力。
因為派生類的虛函數(shù)代碼生成中,會知道(認為)傳入的地址是基類的起始地址,函數(shù)中訪問成員變量都會做(自然的)偏移,以訪問正確的數(shù)據(jù)。
---
說了這么多,就是表示成員函數(shù)指針用來進行調(diào)度分派是很不安全的,而且只能路由到派生類中。
這里我建議使用:std::function。再借助std::bind綁定到各種函數(shù),比如(靜態(tài)綁定)成員函數(shù)。