大龙的博客

常用链接

统计

最新评论

成员函数如何做回调函数---------------------详解 (读mfc源码得来)

class parent
{
public:
    typedef void (parent:: *pfn) ();
    parent() : m_p(this)
    {
    }
    virtual ~parent(){}

    void prints()
    {
        std::cout << "parent!" << std::endl;
    }
 
    void setcallback(pfn pf)
    {
        m_pfn = pf;
        (this->*m_pfn)();                                                 //回调,输出child!
    }

    pfn m_pfn;
 };


class child : public parent
{
public:
    child()
    {
        m_pfn = static_cast<void (parent::*)()>(prints);    //这里类型必须匹配(利用static_cast)
    }
    ~child(){}

    void prints()
    {
        std::cout << "child!" << std::endl;
    }

    void _callback()
    {
        (this->*m_pfn)();                                            //回调,输出child!
  
        setcallback(m_pfn);

    }
    int a;
    pfn m_pfn;
};

void main()
{
    parent *pt;
    child onechild;
    pt = &onechild;
 
    onechild._callback();
}

posted on 2007-05-14 19:24 大龙 阅读(1926) 评论(3)  编辑 收藏 引用

评论

# re: 成员函数如何做回调函数---------------------详解 (读mfc源码得来) 2007-07-05 15:50 luckbill

感觉这个用法不是回调,更像是函数指针的用法:)
回调一般是记录一个函数指针,在发生某个事件或者条件时,利用这个指针去调用处理函数。  回复  更多评论   

# re: 成员函数如何做回调函数---------------------详解 (读mfc源码得来) 2007-07-09 18:16 大龙1

嗯,上面是函数指针的用法,不过可以把上面的code修改成有回调的味道。  回复  更多评论   

# re: 成员函数如何做回调函数---------------------详解 (读mfc源码得来) 2012-02-23 10:57 we

怎么在网上就看到这么多拼写都有错误,更不要说编译错误的代码呢?CTRL+C都不会用吗?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理