`
eric_weitm
  • 浏览: 242731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

成员函数指针实现的回调

    博客分类:
  • c++
 
阅读更多

成员函数指针实现的回调

 

1、回调的类型设置成基类的成员函数,每次set时进行转换

2、回调的参数是menuItem自身

3、回调的实现是 m_pListener->*m_pfnSelector)(this);  即初始化的时候,设置的是监听者(负责处理回调的指针),

   回调内的参数是被点击的对象指针,一般情况下 这2个是一致的。

   

例子:cocos2d-x中的实现

1、CCObject.h

typedef void (CCObject::*SEL_MenuHandler)(CCObject*);             // 定义回调类型

#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)    // 定义转换成合适类型的功能函数, 注意为了可移植性 要用取地址的符号 &

 

2、CCMenuItem.cpp 中

bool CCMenuItem::initWithTarget(CCObject *rec, SEL_MenuHandler selector)  // 设置回调,和负责监听的对象

{

    setAnchorPoint(ccp(0.5f, 0.5f));

    m_pListener = rec;

    m_pfnSelector = selector;

    m_bIsEnabled = true;

    m_bIsSelected = false;

    return true;

}

 

void CCMenuItem::activate() 

{

    if (m_bIsEnabled)

    {

        if (m_pListener && m_pfnSelector)

        {

            (m_pListener->*m_pfnSelector)(this); // 触发回调,从上一层的menu来调用

        }

        

        if (kScriptTypeNone != m_eScriptType)

        {

            CCScriptEngineManager::sharedManager()->getScriptEngine()->executeMenuItemEvent(this);

        }

    }

}

 

3、使用的方式

 CCMenuItemImage *pCloseItem = CCMenuItemImage::create(

                                        "CloseNormal.png",

                                        "CloseSelected.png",

                                        this,                                        // 设置listener

                                        menu_selector(HelloWorld::menuCloseCallback));// 设置callback

 

void HelloWorld::menuCloseCallback(CCObject* pSender) // 真正的回调函数

{

    CCDirector::sharedDirector()->end();

 

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    exit(0);

#endif

}

分享到:
评论

相关推荐

    c++ 函数指针和回调的使用

    下面我们将深入探讨普通函数指针、同一类的成员函数指针以及不同类的成员函数指针的使用。 首先,让我们了解**普通函数指针**。普通函数指针是C++中一种基础的数据类型,可以存储任何无参数或具有特定参数类型的...

    一般函数指针和类的成员函数指针

    理解一般函数指针和类的成员函数指针之间的区别,能够帮助开发者更灵活地设计和实现程序逻辑。尤其是当涉及到类的非静态成员函数时,需要特别注意`this`指针的存在,以及如何正确声明和调用成员函数指针。

    C++将类的成员函数作为回调函数

    这在很多情况下是不方便的,尤其是在需要将函数作为回调注册到其他库或框架的情况下,这些库或框架通常希望提供一个简单的、不需要额外参数的函数指针。 #### 解决方案1: 使用单例模式 一种解决方案是在类内部定义...

    c++类成员函数作为回调函数

    为了使成员函数可存储,我们需要一个对象实例和成员函数指针。例如,可以使用`std::bind`或者lambda表达式来包装成员函数和其对应的对象实例: ```cpp class MyClass { public: void memberFunction(int arg) {...

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

    在Linux系统中,C语言是一种基础且强大的编程语言,它提供了丰富的功能,其中包括函数指针和回调函数的概念。本文将深入探讨这两个主题,并通过实际的示例代码来帮助你理解和应用它们。 首先,我们来理解函数指针。...

    C++ 一般(普通)函数指针、类成员函数指针,用法区别,以及强制转换

    函数指针分为两类:一般(普通)函数指针和类成员函数指针。这两种类型的指针在用法上有所区别,且类成员函数指针涉及到更复杂的面向对象特性。本文将深入探讨它们的区别以及如何进行强制转换。 首先,让我们从一般...

    通过函数指针调用C++非静态成员函数

    在C++编程中,通过函数指针调用非静态成员函数是一种高级技巧,主要用于实现回调、动态绑定等场景。本文将详细探讨如何在Visual C++ 6.0 (VC6.0) 和Borland C++ Builder 6.0 (BCB6.0) 中实现这一功能。 #### 一、...

    mfc下实现回调函数

    在MFC中,我们可以使用C++的成员函数作为回调,但需要解决成员函数指针不能直接作为普通函数指针的问题。 首先,我们需要理解回调函数的基本概念。回调函数是一种函数,它的地址被存储在另一个函数中,当那个函数...

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

    为了解决这个问题,我们需要采用一些策略来实现C回调C++成员函数。 首先,我们需要理解C语言与C++的差异。C语言是过程式的,不支持类和成员函数。而C++是面向对象的,提供了类、继承和多态等特性。因此,当我们想要...

    成员函数指针与高性能的C++委托

    成员函数指针提供了一种方法,使得可以在运行时动态地调用类的成员函数,这对于实现诸如事件处理机制或回调机制等非常有用。 #### 实现高性能的C++委托 **委托**在C++中通常是指一种能够存储并执行函数的对象。它...

    C++成员函数指针的应用

    在C++中,成员函数指针是一个强大的工具,尤其在事件驱动和多线程编程中,它可以用来作为回调函数的接口。成员函数指针能够直接指向类中的某个特定函数,使得我们可以在不知道具体函数名的情况下调用某个对象的成员...

    高手编程笔记 如何使用成员函数指针

    1. **回调函数**:在需要调用特定对象的成员函数作为回调时,可以将成员函数指针作为参数传递。 2. **函数对象(Functor)**:成员函数指针可以用于实现类似于函数对象的行为,特别是在C++标准库中的算法中,如`std...

    函数指针就是指向函数的指针;类成员方法指针,类具有类域操作符

    2. **非静态成员函数指针**:非静态成员函数指针需要一个对象实例才能调用,因此在使用非静态成员函数指针时,需要提供对应的类实例。 3. **typedef简化函数指针**:为了简化函数指针的使用,可以使用`typedef`创建...

    c++ 成员函数指针

    C++中的成员函数指针是一种特殊的指针类型,它可以...总的来说,C++中的成员函数指针和functor是两种不同的但相关的机制,它们都能实现将行为作为值传递的效果。理解并熟练运用这些概念对于提升C++编程能力非常有帮助。

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

    在这个"SDK和成员函数作为回调函数demo"中,我们将深入探讨如何在SDK的上下文中使用成员函数作为回调函数。 首先,SDK中的接口通常是通过函数调用来实现功能的,这些函数可能需要开发者提供一个函数指针,以便在...

    BCB线程中调用主界面的回调函数

    网上的回调函数都是API例子,学习函数指针倒是不错,可是很难让初学者立即应用。常见的情况是辅线程完成某事件后需要“通知”主界面,比如常见的进度条——线程中完成一定的进度后即通知主界面显示到一定的刻度。本...

    C++ 回调函数

    在C++中,除了使用函数指针,还可以使用成员函数指针或者std::function来实现回调。成员函数指针适用于类的成员函数作为回调的情况,而std::function则提供了更灵活的回调机制,可以存储任何可调用对象,包括普通...

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

    } 通过以上两个例子,我们可以看到,将类成员函数用作C回调函数主要面临的问题在于C++成员函数的`this`指针。`this`指针在成员函数中用于访问对象的实例数据,但在C回调函数中并不存在这样的机制,因此我们需要采取...

    C++中回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数...由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会因为隐含的this指针使得函数参数个数不匹配,从而导致回调函数安装失败。要解决这一问题的关键就是不让thi

Global site tag (gtag.js) - Google Analytics