2012-10-11 32 views
2

可能重复:
What does void(U::*)(void) mean?回调函数的语法

考虑以下几点:

template <class T> 
class myButtoncb { 
    private: 
     T *ptr; 
     void (T::*cback) (void) 
} 

我的理解是:

void (*cback) (void) 

这不过是一个函数指针,它指向返回void且不带参数的函数。

我不明白的是T::的重要性是什么?宣布 仅仅像void (*cback) (void)还不够吗?

+0

-1张贴愚弄的人(即使这不是愚弄的人,应该是从基本的C很明显++语法这是什么意思。) – 2012-10-11 06:59:28

回答

2

这就是说,它是一个具有this指针的成员函数。否则,它将是一个自由函数,不会有任何想法它正在操作什么对象,并且将无法访问任何非静态成员函数或成员变量。

+0

这是一个不错看它的方式。 :)。 – Whoami

1

C++ FAQ

是“指针到成员函数”不同于“指针到功能”的类型?

是的。

Link我已经提供给你的信息有很多关于这个话题的信息。

+0

对于有用的链接+1! – besworland

+0

@besworland链接并不差,但并不存在真正的信息。另外,直接提供信息可以说[比提供链接更好](http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers) 。 – jogojapan

+0

@jogojapan我的答案不仅提供了进一步阅读的链接,而且还给出了精确的答案:“是否仅仅像void(* cback)(void)一样声明?” –

0

您传递的函数必须在类T中声明 - myButtoncb的模板参数。所以,你可以使用如下的功能:

class A 
{ 
public: 
    void foo(void); 
}; 


myButton<A> b; 
b.cback = &A::foo;