C++ function pointer

member function pointer
typedef wchar_t *(TextSource::*song_pfn)(wchar_t * const);
wchar_t * const song_name = (this->*song_pfunc)(title.get());

function pointer
typedef wchar_t *(*song_pfn)(wchar_t * const);
wchar_t * const song_name = (*song_pfunc)(title.get());


上面是我OBS plugin obs-text的一段code
有一點要注意,使用pointer一定要dereference後用()包起來
否則compile會過,執行會出錯
這樣寫會出錯  *song_pfunc(title.get());

如果class function沒用到class member,還是會把this push進去 (看asm確認的)
MSVC沒有優化掉,大概是為了保持calling convention吧 (可能是assign給pointer的關係)

有被assign進function pointer的function無法inline

據說function pointer對CPU的pipeline不好,無法預測branch? 速度可能會比較慢,未確認

留言

這個網誌中的熱門文章

OBS 抓不到畫面, 視窗, 遊戲擷取, 黑或白畫面, 當掉 ,卡住, black/white screen, window game capture, crash, freeze

優化實況(一) OBS設定 streaming settings

OBS plugin obs-text 顯示播放中音樂, display playing music