再論雙分派

2021-04-13 09:57:07 字數 907 閱讀 4501

暴力雙分派速度快,可是當類增多時,代價依然很大。

map雙分派在速度優化上有dynamic_cast和static_cast兩種選擇,loki把這個選擇做成了policy。

矩陣雙分派速度上有天然的優勢,但是你要修改你的類。於是loki也把這個做成了policy供你選擇。

矩陣雙分派的思想是,在你的class裡儲存分配器使用的乙個id值,分配器可以隨時獲取或者設定它。分派器操作此值構造矩陣,這樣雙分派變成了二維平面上的point找尋,而且這個點的x、y標你都知道,這是可以的最快的分派查詢方式了。

map雙分派使用了區域性類的思想可以和仿函式有機結合在一起。你可以儲存函式的狀態。

再論雙分派,我想說點於雙分派外得到的東西。

暴力雙分派給我們的啟示是template給我們了乙個驅動編譯器的工具,你可以使用if-else和遞迴讓編譯器幫你生成**。

map雙分派告訴我們對區域性類的使用方式,它還給我們一次使用c++編譯器開發者常用但我們不常用的技術(區域性類)的機會,了解這些對你使用c++有很大的幫助。

矩陣雙分派的思想不難想到,技術也常用,但是它的難度在於第乙個想到這麼做的人如何思考的。

三種雙分派策略組合到庫里的時候,loki又向你展示了policy的作用和效果。

關於policy,我覺得它給我的其實很多。一直以來,我都討厭被寫成很大的類,它不便閱讀,自然維護性非常差,而且我總認為這樣做是在借助c++的封裝做c的事情,c中遇到的問題你都會遇到,因為你的類足夠大了。

但是,有事拆分乙個類同樣很難,至少很多時候我不知道如何做決定,在類龐大了,維護不方便的時候才想起來其實以前該拆分的,但這個時候已經很晚了。policy給了我乙個提示。你可以組裝,運用模板或者繼承,對原件的維護就是對乙個小類的維護,這樣會好很多。是的,看懂、維護組裝關係一樣會在policy多的時候成為問題,但是,其一,你有選擇的自由,其二,這至少使得問題可以得到解決。

C 單分派和雙分派問題

分派說的是根據物件的型別和引數型別來確定最終呼叫的實際函式,體現出來也就是多型性。c 多型一般分為兩種,一種是靜態多型,也就是通過過載 同名不同參 以及通過模板的實現 另一種就是動態多型,也稱執行時多型,通過虛函式的繼承與重寫來實現的。單分派 也就是只能同時進行一種方式的分派,也即要麼就是通過過載實...

java動態 靜態繫結以及雙分派

動態繫結 程式在執行期間而不是在編譯期間,根據所引用物件的實際型別呼叫對應的方法,重寫以及介面的實現都屬於該範疇,使用實際的物件資訊來完成api的呼叫 public class dynamicbind class father class son extends father class daugh...

再論向上轉型

向上轉型的好處,已經在這篇文章 這是乙個鏈結 的 中演示了,但是沒有說不好處。現在就說說不好處,以鏈結中的 為背景,animal a1 new lion animal a2 new mokeny new出來的lion和mokey物件向上轉型為animal物件,可以使用統一的eat 讓jvm去分辨到底...