1.如果采取实例化,然后,在调用这个成员函数的时候总是带上实例的名字调用,我觉得这很不科学,否则每次改变实例的名字,调用函数的时候也要跟着改变。
2.
class a
{
public:
void ss();
}
void tt()
{
ss();
}
void ss()
{
while(1);
}
int main()
{
tt(); //不会出错,但是调用的ss并不是类成员函数ss。要注意是否是类成员函数。一个函数的定义带不带::差别是很大的。
}
3.要达到的目的是,封装到一个类里面的同时,做到不依赖某个固定的实例。或者做到尽量少依赖,定义一个实例,
只使用一次实例的名字。
4.void Websocket::on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
/* std::cout << "on_message called with hdl: " << hdl.lock().get()
<< " and message: " << msg->get_payload()
<< std::endl;*/
//::SendMessage(AfxGetMainWnd()->m_hWnd,WM_CLOSE,0,-1);
readStrJson(msg->get_payload());
1>d:\llz\kl_wlserver\kl_wlserver\websocket.cpp(43) : error C2352: 'Websocket::readStrJson' : illegal call of non-static member function
可以看出,在一个成员函数的定义内容里面,所有不指名域的函数也都会被冠以该类的域。
因为on_message是static型的,所以readStrJson也应该是static型的。
5.最后问自己一遍,为什么要加static。
首先,如果我使用了回调函数,传给回调函数的参数是类成员函数,可以采取两种做法:第一就是实例化了之后,传入该实例对应的成员函数的地址,(比如,Websocket.aa),第二就是,直接&Websocket::aa,但是,aa在声明的时候要加static。
为了减少对实例的依赖,我采取了第二种做法。