指针函数回调实例

以下实例是模拟发起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;

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值