C++回调函数的简单使用例子

C++回调函数简单实现 在网络消息处理中经常要用到回调机制,有的是来处理异步网络数据通信问题(摄器模式),有的是来处理订阅问题(观察者模式)。 在C/C++开发用用的很多,一下是一些简单例子(部分例子代码不全,需自行补全) 阅读详情

说起回调函数,大家可能觉得会很高大上,或者是非常困难。但是今天呢,我想和大家一起分享一个简单的回调函数通过使用C++的类来实现。使用的环境是VS2017+win10。好,废话不多说直接分析。

回调函数,本质上是将函数的指针作为参数,然后在函数内部通过函数指针来调用该函数。请记住第一点,函数名是地址。你可以直接用  函数名(参数)  的方式来调用函数,或是像(*函数名)(参数)来调用。

上部分代码:

CallBackFunc.h

#pragma once
typedef struct Param;
typedef bool (*pFunc)(Param* param);
class CallBackFunc
{
public:
    CallBackFunc(pFunc myFunc, Param* param) :m_myFunc(myFunc), m_param(param) {}
    void CallFunc();
    ~CallBackFunc();
private:
    pFunc m_myFunc;
    Param* m_param;
};
这是类的头文件。需要值得注意的是,pFunc和Param都是声明,但是没有定义,如果不这么做编译器会报错,提示无法识别该类型。你可能会说那难道不定义了吗?不是的,一般是在我们要使用的地方定义。

CallBackFunc.cpp

#include "CallBackFunc.h"

CallBackFunc::~CallBackFunc()
{
    m_myFunc = 0;
    m_param = 0;
}
void CallBackFunc::CallFunc()
{
    if (m_myFunc != 0 && m_param != 0)
        m_myFunc(m_param);
}

到此,有关类的部分已经写完了。

你可能会问这样直运行的话pFunc和Param都未定义那要怎么做呢?

别着急接下来就是怎么定义他们了。

main.cpp

#include"CallBackFunc.h"
#include<iostream>
typedef struct Param
{
    int age;
    char sex;
    char name[64];
    Param(int a, char s) :age(a), sex(s) {}
};
bool printFunc(Param *param)
{
    if (param == NULL)
        return false;
    std::cout << "age: " << param->age << std::endl;
    std::cout << "sex: " << param->sex << std::endl;
    std::cout << "name: " << param->name << std::endl;
    return true;
}
int main()
{
    Param* myparam = new Param(15,'f');
    strcpy_s(myparam->name, 64, "John-Timer");
    CallBackFunc test(printFunc,myparam);
    test.CallFunc();
    test.~CallBackFunc();
    delete myparam;
    myparam = 0;
}

注意这里你定义的printFunc函数的返回值与参数列表一定要与之前定义的函数指针类型值相同,否则会报错。这里的Param你可以想怎么定义就怎么定义,但在这个文件中你只能定义一次。至于函数,只要函数名不同即可,返回值和参数列表不可以改。

最后是运行结果:

如果大家觉得有帮助麻烦点个赞,谢谢大家了。

C++ 回调函数简单示例 回调函数其实就是以函数指针做函数参数传递给另一个函数,在另一个函数执行的时候可以根据函数指针执行回调函数的代码。 简单示例,便于理解,防止遗忘。 #include &lt;iostream&gt; typedef double (*CallbackFunction)(double a, double b); // 回调函数指针 void CallCallbackFunction(Callba... 阅读详情

相关推荐

手把手教你如何编写 C++ 回调函数

回调模式是一种常见的设计模式,在 C++ 程序设计中有着广泛的应用。例如,在 SDK 的设计中,为增强 SDK 的通用性,比如嵌入算法逻辑、实现插件支持等,这时候回调函数就能派上用场了。下面通过三个示例,带领读者循序渐进设计 C++回调函数,实现回调函数的注册和执行,以及参数的传递。与 C 语言中通过函数指针实现回调不同,在 C++ 中通常使用和std::bind实现。

程序员「阿基米东」的编程之旅 1495

C++回调函数

如果你把函数的指针(地址)作为参数传递给另一个函数,回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。p指向Max函数之后,然后用p调用Max函数,返回两个数中的最大值。特别注意的是,因为函数名本身就可以表示该函数地址(指针),因此在获取函数指针时,可以直接用函数名,也可以取函数的地址。前面函数指针的方式作为回调函数的一种方式,可以同时用于C和C++,下面介绍另外的一些方式,因为C++引入了对象的概念,可以使用类的成员和静态函数作为回调函数

mayue_web的博客 5084

C语言拾遗

一些C的问题ypedef structmalloc(sizeof(polynode)) ypedef struct 多项式结点类型声明: typedef struct pnode { float coef; /*系数*/ int exp; /*指数*/ struct pnode *next; } polynode; 1、struct pnode 定义了一个新的数据类型,或者说是一个新的结构类型,它定义了一个新的对象,这个对象有着多种的属性。 2、利用typedef给与了struct pnode

m0_51252412的博客 581

C++回调函数的一个简单例子

回调函数应用实例: 1、定义一个Person类 (Person.h)文件: 注意:在这个类中指定了回调函数回调函数的执行者,和回调函数指针 重要的是  回调函数回调函数指针是怎么关联的? 2、Person类的具体实现(Person.cpp) 上面的Person.cpp文件的实现当中,我运用了枚举的使用,请一定要注意,回调函数指针指向的是哪一个回调函数回调函数

清新的世界 2万+

C++ 回调函数简单例子

调用端 //下面的这个_stdcall很重要的 void _stdcall Test(int n, string str) //如果不定义全局变量,而定义在类中 则必须是 静态成员函数 { while(n-->0) cout<<n<<" "<<str<<endl; } int main(int argc, char* argv[]) { Call call;

wnlwcg的专栏 3076

回调函数

来源:http://wenku.baidu.com/view/00df8dd226fff705cd170a05.html 作者:未知  对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。   什么是回调函数?   简而言之,回调函数就是一个通过函数指

jiht594的专栏 516

怎么理解c++中的回调函数?为啥需要回调?

回调小思谈回调回调的形象说明程序里怎么做?最后附上本人涂鸦作. 谈回调 调用一些sdk或别人写的代码库时,常会用到回调.但是它到底是干什么的?为啥需要他?这些问题以前都没有很深入的理解它,就知道就应该这样,必须这样做. 回调的形象说明 如果说回调,有下面这个形象的说明: A调用了B的某个函数,然后B去执行这个函数,这个执行是有时间的,如果时间太长那么这时候就需要回调了.因为A不可能一直等B...

一只懒虫的博客 4923

Java回调函数的理解

       所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。例如Win32下的窗口过程函数就是一个典型的回调函数。一般说来,C不会自己调用B,C提供B的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的B姓甚名谁,所以S会约定B的接口规范(函数原型),然后由C提前通过S的一个函数R告诉S自己将要使...

weixin_33712881的博客 59

简单回调函数例子

#include void PrintMessage(int i);   void ShowMessage(void (* ptr)(int), int par);   int main() { ShowMessage(PrintMessage, 3);   return 0; }    void PrintMessage(int i){      printf("T

wujin8589的博客 2768

C++ 回调函数 例子

适应场景:classB 的实例作为classA类中的一个变量,classB 在运行中反而需要调用classA中的变量或者函数。 例如:相机的回调函数,classA为UI界面,classB 为相机SDK,classB 的实例作为classA类中的一个变量。classB 不断运行获取图片,并调用classA中的回调函数将图片显示在UI界面上。 #include "classB.h" class classA { public: classA(); ~classA(); classB classB_;

chqaz123的博客 2682

C++简单回调函数示例

回调函数就是自己写的一个函数,但是不能被显式的调用,而是把该函数的地址作为一个别的函数参数来引用,这样用来处理当一些事件发生时可以调用这个自己定义的回调函数,完成一些处理。 #include #include using namespace std; void MouseDown() { cout << "mouse down" << endl; } void Mouse

sweetdark的专栏 928

“深入浅出”系列之C++:(4)回调函数

回调函数(Callback Function)是一种编程模式,它允许一个函数作为参数传递给另一个函数,并在某个特定事件或条件发生时被调用。这种机制使得程序能够在不阻塞主线程的情况下,异步地处理任务或事件。

weixin_65589140的博客 1383

C++回调函数

函数指针:适用于简单场景,但不够灵活。静态成员函数:无需实例,但无法访问非静态成员。和Lambda:现代C++推荐方式,支持多种可调用对象,灵活安全。生命周期管理:使用智能指针(如weak_ptr)确保回调安全,避免悬垂引用。异步处理:注意线程安全,合理管理资源和执行上下文。

weixin_43510208的博客 597

回调函数详细介绍(C & C++代码实例)

在编程中,回调函数是一种常见的技术,用于在异步操作完成后执行特定的代码。它允许我们将一个函数作为参数传递给另一个函数,以便在适当的时候执行。回调函数通常用于处理事件处理、异步编程和事件驱动的程序中。

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 1731
下一篇: 关于C/C++ 异常定位的一些小小心得
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值