C++ c++;:无法理解消息处理程序
事实上,我对编写处理程序还不熟悉,但不知何故,我成功地编写了这段代码:C++ c++;:无法理解消息处理程序,c++,function-pointers,C++,Function Pointers,事实上,我对编写处理程序还不熟悉,但不知何故,我成功地编写了这段代码: #include<iostream> using namespace std; class test { public: typedef void (test::*MsgHandler)(int handle); test() { cout<<"costructor called"<<endl; } void Initialize() { add_msg_Handl
#include<iostream>
using namespace std;
class test
{
public:
typedef void (test::*MsgHandler)(int handle);
test()
{
cout<<"costructor called"<<endl;
}
void Initialize()
{
add_msg_Handler(4,&test::System);
}
void System(int handle)
{
cout<<endl<<"Inside System()"<<endl;
cout<<"handle:"<<handle<<endl;
}
protected:
MsgHandler message[20];
void add_msg_Handler(int idx,MsgHandler handler)
{
cout<<endl<<"Inside add_msg_Handler()"<<endl;
cout<<"handler:"<<handler<<endl;
message[idx]=handler;
cout<<"message:"<<message[idx]<<endl;
}
};
int main()
{
test obj;
obj.Initialize();
return 0;
}
但有几件事超出了我的范围。如果我是对的,那么应该在此行中调用System():
add_msg_Handler(4,&test::System);
但这并没有发生。我需要帮助纠正这个问题
第二件事是,我无法理解为什么我会得到这样的输出:
handler:1
我的意思是处理程序是如何初始化为1的。有人能帮我解决这个问题吗???test::System不是函数调用,而是指向成员函数的指针
test::System
(一个调用看起来像
System(0)
,如果将其用作相关参数,则不会编译。)
如果查看添加消息处理程序的定义
:
cout<<endl<<"Inside add_msg_Handler()"<<endl;
cout<<"handler:"<<handler<<endl;
message[idx]=handler;
cout<<"message:"<<message[idx]<<endl;
couthow是MsgHandler定义的吗?“如果我是对的,应该调用System()”—不,您从未调用过System()或handler()。@ShlomiAgiv,第8行。
cout<<endl<<"Inside add_msg_Handler()"<<endl;
cout<<"handler:"<<handler<<endl;
message[idx]=handler;
cout<<"message:"<<message[idx]<<endl;