以下实例是模拟发起post请求到web服务器的后回调处理。
HttpClient.h
#pragma once
#include <iostream>
#include <string>
class BaseClient
{
public:
void onSucess(char* result);
};
typedef void (BaseClient::*RespnoseCalback)(char*);
#define call_fun(_method)(RespnoseCalback)(&_method)
class HttpClient :public BaseClient
{
public:
//设置获取到结果回调
void setCallback(RespnoseCalback callback);
//模拟post请求
void post();
//post请求后回调
void getResult(char*);
protected:
RespnoseCalback mCallback;
};
对于刚入门c/c++的人 ,对 typedef void (BaseClient::*RespnoseCalback)(char* result); 和#define call_fun(_method)(RespnoseCalback)(&_method)这行代码就懵逼了,不要紧,下面来分析下。
例如:我要定义一个方法
void method(int a)
{
}
那么, 用 typedef 来写这么写呢 ?可以这样写,
typedef void (*method) (int)
method 就代表了这个方法。 以下是定义格式
typedef 返回类型 (*方法) (参数类型)
对于#define call_fun(_method)(RespnoseCalback)(&_method)这句
其实就是把实现的方法强制转换成 RespnoseCallback类型 ,可以自己写个例子亲自体会
,宏的本质意义就是节省写多余的代码。以下是补全的代码
HttpClient.cpp
#include "HttpClient.h"
void BaseClient::onSucess(char* content)
{
}
void HttpClient::getResult(char* result)
{
std::cout<<"recieve a result:"<<result<<std::endl;
delete this;
}
void HttpClient::post()
{
(this->*mCallback)("sucesss!");
}
void HttpClient::setCallback(RespnoseCalback callback)
{
this->mCallback = callback;
}
#include "HttpClient.h"
int main()
{
HttpClient* httpclient = new HttpClient;
httpclient->setCallback(call_fun(HttpClient::getResult));
httpclient->post();
system("PAUSE");
return 0;
}