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 :) –