这个事情搞得我很纠结
在我的代码里面,界面有一个类GuiClass,然后又有另外一些不太相关代码Sth.c,Sth里面的sth_op执行的时候,在Gui上面有显示。所以我第一反应是sth_op里面注册一个GuiClass->ShowOp。即
sth_op()
{
// real operation here
// gui show callback
if (gui_cb != NULL)
{
gui_cb;
}
}
然后在GuiClass的构造函数里面去注册这个gui_cb.
GuiClass::GuiClass()
{
// register gui_cb
gui_cb = this->ShowOp;
}
但是很显然,问题就出在gui_cb = this->ShowOp里面。
那么,什么样的做法是一个好的做法?
【 在 KillnCov 的大作中提到: 】
: C++的成员函数是整个类共有的,所以成员函数指针也是针对整个类的,所以初始化定义时指向整个的类的。类似 int (CLASS::*fp)(PARA) = &CLASS::FUNC。调用时需要指明具体实例化的对象,比如CLASS c; c.*fp(para)。
: 换句话说,从来没有某个类实例的函数地址,也获取不到。你只能通过类实例去调用这个函数指针。
: 所以你看,类成员函数指针就是鸡肋,没啥额外好处。
: ...................
--
FROM 124.126.140.*