0

給定以下代碼,我無法編譯。從成員函數模板參數調用成員函數

template < typename OT, typename KT, KT (OT::* KM)() const > 
    class X 
    { 
    public: 
     KT mfn(const OT & obj) 
     { 
      return obj.*(KM)(); // Error here. 
     } 
    }; 

    class O 
    { 
    public: 
     int func() const 
     { 
      return 3; 
     } 
    }; 

    int main(int c, char *v[]) 
    { 
     int a = 100; 

     X< O, int, &O::func > x; 

     O o; 

     std::cout << x.mfn(o) << std::endl; 
} 

我得到的folling錯誤信息

error: must use '.*' or '->*' to call pointer-to-member function in '&O::func (...)' 

我以爲我所用。*,但我已經很明顯了一些錯誤。

如何調用成員函數?其中

我已經試過

return obj.*(template KM)(); 
return obj.*template (KM)(); 
return obj.template *(KM)(); 

無工作。

+1

函數指針是真正可怕的野獸:( –

+0

注意'template'只需要依賴模板和'Ø:: func'不是一個模板函數。 –

回答

5

正確的語法是

return (obj.*KM)(); 
+0

謝謝Gareth ..我正式是一個混蛋:)這是我唯​​一沒有嘗試過的。 – ScaryAardvark

+0

提醒一下,如果沒有它將要執行的對象,那麼想象一下函數指針不完整(畢竟需要'this')。如果你採用函子的觀點,它更有意義,至少這就是我如何記住語法......而當我不能,我只是谷歌「C++指針功能」,這裏是始終立即鏈接的鏈接:http://www.newty.de/fpt/fpt.html :) –