我試圖傳遞成員函數指針作爲模板參數。下面是代碼:當使用成員函數作爲模板參數時C++編譯錯誤
template <typename Ret, typename T, Ret(T::*mptr)()>
Handle<Value> get_value (Local<String> name, const AccessorInfo& info)
{
...
}
template <typename Ret, typename T>
void mbind (const char* name, Ret (T::*mptr)())
{
....
objectTemplate->SetAccessor (String::NewSymbol (name),get_value<Ret,T,mptr>);
}
這是我得到的錯誤:
wrapper.h:184:5: error: ‘mptr’ is not a valid template argument for type ‘int (Cell::*)()’
wrapper.h:184:5: error: it must be a pointer-to-member of the form `&X::Y'
...
據我所知指向成員函數是有效的模板參數。我不明白以前的代碼有什麼問題。我使用的編譯器是Ubuntu下的g ++ 4.5.2。
在此先感謝。
UPDATE:
這似乎代碼應該是錯了,因爲mptr
是一個運行時變量。在另一方面,代碼前面的摘錄編譯:
所以...是正確的嗎?它依賴於編譯器嗎?
謝謝。我已經將指向成員函數的指針添加爲'mbind()'的模板參數,並且它可以工作。調用是這樣的:'mbind(「getWidth」);' 現在我想知道是否有任何其他方式來調用'mbind()'更簡單用戶(不必指定所有這些模板參數)。 謝謝! –
user1192525
2012-03-14 00:13:19
所以......我們不知道它是否有效(並且僅由某些編譯器支持):d – user1192525 2012-03-14 00:19:20