Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 回调函数语法_C++ - Fatal编程技术网

C++ 回调函数语法

C++ 回调函数语法,c++,C++,可能重复: 考虑到以下几点: template <class T> class myButtoncb { private: T *ptr; void (T::*cback) (void) } class A { public: void foo(void); }; myButton<A> b; b.cback = &A::foo; 它只是一个函数指针,指向一个返回void且不带参数的函数 我不明白的是,T::的重

可能重复:

考虑到以下几点:

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


myButton<A> b;
b.cback = &A::foo;
它只是一个函数指针,指向一个返回void且不带参数的函数

我不明白的是,
T::
的重要性是什么?申报还不够吗
仅与
void(*cback)(void)

类似,这表示它是一个具有
This
指针的成员函数。否则,它将是一个自由函数,不知道它在操作什么对象,也无法访问任何非静态成员函数或成员变量。

From

“指向成员函数的指针”的类型与“指向函数的指针”的类型不同吗

是的


我提供给您的有很多关于这个主题的信息。

您在那里传递的函数必须在类T(myButtoncb的模板参数)中声明。因此,您可以使用如下函数:

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


myButton<A> b;
b.cback = &A::foo;
A类
{
公众:
void foo(void);
};
我的按钮b;
b、 cback=&A::foo;

< /代码> 1用于发布一个DUPE(即使这不是一个DUPE,它应该是非常明显的从基本C++语法中这意味着什么)这是一个很好的方式来看待它。besworland链接还不错,但实际上没有那么多信息。另外,直接提供信息可以说是。@jogojapan我的回答不仅提供了进一步阅读的链接,还提供了“仅仅声明为void(*cback)(void)还不够吗?”的准确答案@Sergey拜托。。。你的回答基本上是肯定的,
*
T::*
之间有区别,但如果你想知道区别是什么,请访问此常见问题解答。(即使是FAQ也只有几行,关于这个主题的信息也不多。)现在我没有说这有什么问题——我没有投反对票——但这并不是我所说的好答案。@jogojapan我应该在书中的答案信息中添加一些让你满意的信息吗?例如,“Stanley Lippman和Barbara Moo从C++底漆中封装的指针类型,以及指针指向的成员类型”的指针。