`
f002489
  • 浏览: 273080 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

如何定义与实现一个类的成员函数的回调函数

    博客分类:
  • C++
 
阅读更多
http://blog.csdn.net/aafengyuan/article/details/8465130


1).   不使用成员函数,直接使用普通C函数,为了实现在C函数中可以访问类的成员变量,可以使用友元操作符(friend),在C++中将该C函数说明为类的友元即可。这种处理机制与普通的C编程中使用回调函数一样。  
   
  2).   使用静态成员函数,静态成员函数不使用this指针作为隐含参数,这样就可以作为回调函数了。静态成员函数具有两大特点:其一,可以在没有类实例的情况下使用;其二,只能访问静态成员变量和静态成员函数,不能访问非静态成员变量和非静态成员函数。由于在C++中使用类成员函数作为回调函数的目的就是为了访问所有的成员变量和成员函数,如果作不到这一点将不具有实际意义。解决的办法也很简单,就是使用一个静态类指针作为类成员,通过在类创建时初始化该静态指针,如pThis=this,然后在回调函数中通过该静态指针就可以访问所有成员变量和成员函数了。这种处理办法适用于只有一个类实例的情况,因为多个类实例将共享静态类成员和静态成员函数,这就导致静态指针指向最后创建的类实例。为了避免这种情况,可以使用回调函数的一个参数来传递this指针,从而实现数据成员共享。这种方法稍稍麻烦,这里就不再赘述。
举例:
class Test
{
public:
    static void callBackFun(void){}; //因为callBackFun默认有一个const Test* 的指针
};
typedef void (*FPtr)(void);
//typedef   void   (*PFV)();是一个类型定义,定义了一种函数指针,这种指针指向的函数不待参数,无返回类型。  
//typedef   struct   bt{int   i; int   j; }BT;  BT   *tt;
//其中,BT代替了struct   bt   *tt;这就是typedef的用法
void Fun(FPtr ptr)
{
    ptr();
}
void main(void)
{
    Fun(Test::callBackFun);
}
分享到:
评论

相关推荐

    mfc下实现回调函数

    在Microsoft Foundation Classes (MFC) 中,回调函数是一种特殊类型的函数,它允许用户代码与库或操作系统进行交互,尤其是在处理异步事件时。回调函数通常作为参数传递给其他函数,以便在特定事件发生时调用。在MFC...

    将类成员函数用做C回调函数

    然而,将C++的类成员函数作为回调函数使用时,会面临一系列挑战,尤其是由于成员函数依赖于`this`指针的特性。本文将详细探讨如何将类成员函数用作C回调函数,并解析所涉及的技术方案及其适用场景。 ### 回调函数的...

    怎么实现类的成员函数作为回调函数

    在C++中,成员函数通常不能直接作为回调函数,因为它们隐式地接收一个指向对象实例的指针(`this`指针),这与普通函数的参数列表不匹配,导致编译错误。然而,有几种方法可以实现类的成员函数作为回调函数。 **1. ...

    SDK和成员函数作为回调函数demo

    在"SDK_DEMO"这个示例程序中,我们可以看到如何将上述方法应用于实际的SDK开发中,通过一个成员函数作为回调函数,使得SDK能够调用我们的类实例,执行特定的操作。"member_method_as_c_callback"文件可能是演示如何...

    C回调C++成员函数,C++回调C函数~测试可用哦~

    回调函数是一种机制,允许我们将一个函数的指针传递给其他代码,以便在特定事件发生时调用该函数。由于C++支持面向对象特性,而C语言则不支持,因此在C++中定义的成员函数不能直接作为C函数的回调。为了解决这个问题...

    vc回调函数例子

    在C++编程中,回调函数是一种机制,允许我们传递一个函数作为参数到另一个函数中,以便在特定事件发生时调用。在Visual C++(VC)环境中,回调函数经常用于异步操作、事件处理或者在多线程编程中协调不同组件。本...

    如何让API回调你的VC类成员函数而不是静态函数

    在软件开发过程中,特别是使用C++进行Windows编程时,我们经常会遇到需要将一个类的成员函数作为回调函数传递给某个API(应用程序接口)的情况。然而,由于历史原因和技术限制,大多数API倾向于接受静态函数作为回调...

    C# 回调CV++ DLL 三种方法 和 多类之间共享一个回调函数

    在C++ DLL中,你需要定义一个与`CallbackDelegate`签名相匹配的函数指针类型,并创建一个全局变量或静态成员来存储回调函数。 回调函数是跨语言和跨进程通信中的关键组件,正确理解和使用回调能够帮助我们构建灵活...

    回调函数演示

    回调函数是一个在其定义之外被调用的函数,它通常是通过将函数指针作为参数传递给另一个函数来实现的。当这个接收函数完成其任务或遇到某个特定条件时,它会使用这个函数指针调用回调函数。 描述中提到的“演示回调...

    C++ 回调函数

    回调函数在C++编程中是一种重要的设计模式,它允许我们传递一个函数作为参数到另一个函数,然后在适当的时候由那个函数内部调用。这种机制在处理异步操作、事件驱动编程、用户自定义行为等方面非常常见。下面我们将...

    VC++ 回调函数使用实例

    2. **声明回调函数的使用**:接下来,在需要使用回调函数的类或函数中,声明一个接收回调函数参数的函数。例如: ```cpp void ExecuteWithCallback(CallbackType callback) { // 在这里执行某些操作,并在适当的...

    回调函数详解

    2. **定义**: 定义回调函数的具体实现。这里需要注意的是,回调函数的参数和返回值类型必须与声明时保持一致。 ```cpp int CALLBACK MyCallback(int arg1, void* arg2) { // 处理回调逻辑 return 0; } ``` 3...

    利用thunk技术改写窗口类回调函数为窗口对象成员函数

    在Windows编程中,通常我们创建窗口时会定义一个窗口类,并在其中设置窗口回调函数(Window Procedure)。然而,这样的设计可能会导致代码组织不清晰,尤其是当窗口类与业务逻辑紧密关联时,回调函数往往需要访问类...

    linuxC语言函数指针回调函数教程

    回调函数是指在另一个函数内部被调用的函数,通常通过函数指针传递给那个函数。这种模式允许我们传递执行特定任务的代码,而不是硬编码在接收函数中。回调函数的应用广泛,例如在事件处理、异步操作或算法实现中。 ...

    C++回调函数

    比如在前面提到的例子中,排序算法的实现者可以定义一个通用的排序框架,而具体的比较逻辑则由用户通过回调函数来提供。 3. **重用性**:由于回调函数允许外部代码插入到内部处理流程中,因此可以更容易地实现代码...

    易语言类方法回调

    1. **定义类和方法**:首先,你需要定义一个类,并在其中声明你要回调的方法。例如,你可以有如下的类定义: ```易语言 .类 基类 .常量 句柄 .过程 .方法1() .代码段 ... .结束代码段 .结束过程 .过程 ....

    浅显易懂的回调函数程序

    这个文件可能包含了一个或多个MFC类,这些类定义了回调函数,并在某个特定的事件或条件下调用它。学习这个例子可以帮助理解回调函数在实际项目中的应用,以及如何在MFC环境中有效地使用它们。 总的来说,回调函数是...

    回调函数的C封装(回调函数的好资料)

    通过这种方式,我们能够在静态成员函数中访问和调用非静态成员函数,从而实现了回调函数与类成员之间的灵活交互。 ### 二、函数的分发再处理 在实际应用中,我们可能需要根据不同的情况调用不同的函数来处理回调...

    基于VS2005的回调函数事例

    回调函数在编程中是一种强大的工具,它允许一个函数在执行过程中调用用户提供的代码,这样就可以实现异步处理、事件处理或自定义行为。在基于Visual Studio 2005 (VS2005)的C++编程环境中,回调函数是通过函数指针...

Global site tag (gtag.js) - Google Analytics