一開始是看到這篇2013的文章
https://eli.thegreenplace.net/2013/12/05/
the-cost-of-dynamic-virtual-calls-vs-static-crtp-dispatch-in-c/
短: https://reurl.cc/M75jGK
裡面只用一個CRTP impl 所以compiler可以直接inline
但是我實際用到virtual是像這樣
集中一堆ABC然後全呼叫一遍:
vector<ABC*> bases;
for(auto& it : bases)
it->virtual_func();
改成CRTP的寫法大概像這樣:
https://godbolt.org/z/LygFKT
我的想像是
visit時不是應該也要先看實際型別是甚麼
再呼叫相對應函數嗎
這跟vtable的行為很像吧
為什麼量測時間 CRTP還是比virtual快了5~7倍?
(i5 7400 + vs2019)
我的程度看組語或是看variant header都很痛苦
所以來洗耳恭聽大大的教訓
感恩