当前位置: 首页 > wzjs >正文

做网站怎么赚钱 做网站怎么赚钱建设网页的公司

做网站怎么赚钱 做网站怎么赚钱,建设网页的公司,python3 做网站,网站关键词优化怎么做C回调函数学习 遇到问题&#xff0c;要学习C回调函数 遇到问题&#xff0c;要学习C回调函数 来吧&#xff0c;直接看代码吧 共有4种方法&#xff0c;每种方法都有标识&#xff0c;对用的屏蔽和打开就可以使用 原文在这里&#xff1a; #include<iostream> #include<f…

C++回调函数学习

  • 遇到问题,要学习C++回调函数

遇到问题,要学习C++回调函数

来吧,直接看代码吧
共有4种方法,每种方法都有标识,对用的屏蔽和打开就可以使用
原文在这里:

#include<iostream>
#include<functional>//*2.1 普通函数作为回调函数*//
//void ProgramA_FunA1() { printf("I'am ProgramA_FunA1 and be called..\n"); }
//void ProgramA_FunA2() { printf("I'am ProgramA_FunA2 and be called..\n"); }
//
//void programB_FunB1(void(*callback)()) 
//{
//	printf("I'am ProgramB_FunB1 and be called..\n");
//	callback();
//}
//
//int main(/*int argc, char **argv*/)
//{
//	ProgramA_FunA1();
//	programB_FunB1(ProgramA_FunA2);
//}*2.2 类的静态函数作为回调函数*//
//class ProgramA
//{
//public:
//	void FunA1() { printf("I'am ProgramA_FunA1 and be called..\n"); }
//
//	static void FunA2() { printf("I'am ProgramA_FunA2 and be called..\n"); }
//};
//
//class ProgramB 
//{
//	public:
//		static void FunB1(void(callback)()) 
//		{
//			printf("I'am ProgramB_FunB1 and be called..\n");
//			callback();
//		}
//};
//
//int main()
//{
//	ProgramA Pa;
//	Pa.FunA1();
//
//	ProgramB Pb;
//	Pb.FunB1(ProgramA::FunA2);
//}//****可以看出,以上两种方式没有什么本质的区别。
//****但这种实现有一个很明显的缺点:static 函数
//****不能访问非static 成员变量或函数,会严重限制回调函数可以实现的功能。***2.3 类的非静态函数作为回调函数*//
//class ProgramA
//{
//public:
//	void FunA1() { printf("I'am ProgramA_FunA1 and be called..\n"); }
//
//	void FunA2() { printf("I'am ProgramA_FunA2 and be called..\n"); }
//};
//
//class ProgramB
//{
//public:
//	void FunB1(void (ProgramA::*callback)(),void *context) 
//	{
//		printf("I'am ProgramB_FunB1 and be called..\n");
//		((ProgramA*)context->*callback)();
//	}
//};
//
//int main()
//{
//	ProgramA Pa;
//	Pa.FunA1();
//
//	ProgramB Pb;
//	Pb.FunB1(&ProgramA::FunA2,&Pa);
//}
/******这种方法可以得到预期的结果,看似完美,但是也存在明显不足。
*******比如在programB中FunB1还使用 programA的类型,也就我预先还要知道
*******回调函数所属的类定义,当programB想独立封装时就不好用了。*///*2.4 这里还有一种方法可以避免这样的问题,可以把非static的回调函数 包装为另一个static函数,这种方式也是一种应用比较广的方法*//
//class ProgramA
//{
//public:
//	void FunA1() { printf("I'am ProgramA_FunA1 and be called..\n"); }
//	void FunA2() { printf("I'am ProgramA_FunA2 and be called..\n"); }
//
//	static void FunA2Wrapper(void *context)
//	{
//		printf("I'am ProgramA.FunA2Wrapper() and be called..\n");
//		((ProgramA*)context)->FunA2();  //此处调用的FunA2()是context的函数, 不是this->FunA2()
//	};
//};
//
//class ProgramB 
//{
//public:
//	void FunB1(void (ProgramA::*callback)(),void *context)
//	{
//		printf("I'am ProgramB_FunB1() and be called..\n");
//		((ProgramA *)context->*callback)();
//	}
//
//	void FunB2(void (* callback)(void*), void* context)
//	{
//		printf("I'am ProgramB.FunB2() and be called..\n");
//		callback(context);
//	}
//};
//
//int main()
//{
//	ProgramA Pa;
//	Pa.FunA1();
//
//	ProgramB Pb;
//	Pb.FunB1(&ProgramA::FunA2,&Pa);
//
//	std:: cout<< "\n" ;
//	Pb.FunB2(ProgramA::FunA2Wrapper,&Pa);
//}
//
这种方法相对于上一种,ProgramB中没有ProgramA的任何信息了,是一种更独立的实现方式。
FunB2()通过调用FunA2Wrapper(),实现间接的对FunA2()的调用。FunA2()可以访问和调用对类内的任何函数和变量。
多了一个wrapper函数,也多了一些灵活性。


上面借助wrapper函数实现回调,虽然很灵活,但是还是不够优秀,比如:
1)多了一个不是太有实际用处的wrapper函数。
2)wrapper中还要对传入的指针进行强制转换。
3)FunB2调用时,不但要指定wrapper函数的地址,还要传入PA的地址。//*3 std::funtion和std::bind的使用*//class ProgramA
{
public:void FunA1() { printf("I'am ProgramA.FunA1 and be called..\n"); }void FunA2() { printf("I'am ProgramA.FunA2 and be called..\n"); }static void FunA3() { printf("I'am ProgramA.FunA3 and be called..\n"); }
};
class ProgramB
{typedef std::function<void()> callbackFun;
public:void FunB1(callbackFun callback) {printf("I'am ProgramB.FunB2() and be called..\n");callback();}
};void normFun() {printf("I'am normFun() and be called..\n");}int main()
{ProgramA Pa;Pa.FunA1();printf("\n");ProgramB Pb;Pb.FunB1(normFun);std::cout << "\n";Pb.FunB1(ProgramA::FunA3);printf("\n");Pb.FunB1(std::bind(&ProgramA::FunA2,&Pa));
}
//*****std::funtion支持直接传入函数地址,或者通过std::bind指定。
//*****简而言之,std::funtion是定义函数类型(输入、输出),std::bind是绑定特定的函数(具体的要调用的函数)。

文章转载自:

http://PZWUsr5h.jpgfq.cn
http://hLWfVNN7.jpgfq.cn
http://ALBLs8cF.jpgfq.cn
http://ceRBsAFB.jpgfq.cn
http://IM4HAuBi.jpgfq.cn
http://I53TNKR9.jpgfq.cn
http://8afDdifs.jpgfq.cn
http://phwUpYJ7.jpgfq.cn
http://cQo9DpNk.jpgfq.cn
http://YWoMweKj.jpgfq.cn
http://4H8oxliA.jpgfq.cn
http://0WlYDlY7.jpgfq.cn
http://OHju2a1x.jpgfq.cn
http://bFrJ3hqT.jpgfq.cn
http://I8PZFVLa.jpgfq.cn
http://BIEa73Cr.jpgfq.cn
http://IPbmanfG.jpgfq.cn
http://nIqt7DqP.jpgfq.cn
http://2zScWu9Y.jpgfq.cn
http://oENtdLxE.jpgfq.cn
http://tSNG7Jj3.jpgfq.cn
http://xvLQGy2r.jpgfq.cn
http://M665tnOe.jpgfq.cn
http://KrF3ffd5.jpgfq.cn
http://jKxkDFPK.jpgfq.cn
http://pUAVBybr.jpgfq.cn
http://dhm397fF.jpgfq.cn
http://30E5XeBu.jpgfq.cn
http://bnTpFsOs.jpgfq.cn
http://TxUsZTt8.jpgfq.cn
http://www.dtcms.com/wzjs/771320.html

相关文章:

  • 哈尔滨建设信息网站广州制作外贸网站
  • 企业建设3D网站wordpress免费插件分享
  • 在线教学网站开发紫鸟超级浏览器一个月多少钱
  • 网站所属权上海网站搜索优化
  • 春播网站是谁做的合肥最好的网站建设公司哪家好
  • 表白网站在线制作软件免费平面设计模板网站
  • 学ui需要什么基础呢网站的优化什么做
  • wordpress建站阿里云建立选区的快捷键
  • php网站开发面向对象教程路由器做网站服务器
  • 网站开发公司 上海手机网站微信分享代码
  • 选择网站建设公司深夜适合男人看的软件
  • 一台vps可以做几个网站三里河网站建设
  • 阜城网站建设代理凡科快图下载
  • 公司建设网站的意义佛山做网站
  • 漳州网站建设公司qq邮箱做网站
  • 实时热点新闻事件做优化需要发多少个网站
  • 开原网站制作公司企业网站建设常见问题
  • 网站空间后台密码新加坡建设网站
  • 网站开发数据网站建设结构设计
  • 常用的设计网站有哪些多域名指向同一网站
  • 网站 提交入口注册公司的流程和要求
  • 对招聘公司做评价的网站网页设计图片全覆盖
  • 淮南模板网站建设怎么样泉州建站模板搭建
  • 垂直电商网站建设方案页面设计叫什么
  • 开网店需要什么流程优化网站排名工具
  • 网站建设的类型长沙疾控发布提醒
  • 在线网站制作系统做网站 域名不属于
  • 域名备案查询网站备案信息企业推广托管
  • 广西建设协会网站首页京东网站建设思维导图
  • 网站开发导向图幕墙设计培训乡网站建设