一开始是看到这篇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都很痛苦
所以来洗耳恭听大大的教训
感恩