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? 速度可能會比較慢,未確認
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? 速度可能會比較慢,未確認
留言
張貼留言