zoukankan      html  css  js  c++  java
  • c++_成员函数回调

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    
    class CAppleDemo
    {
    public:
        CAppleDemo();
        ~CAppleDemo();
     
        void fun1(void);
     
        void fun2(int a, int b);
     
        int fun3(int a);
    };
    
    
    #include <iostream>
     
    CAppleDemo::CAppleDemo()
    {
          //    std::cout << "CAppleDemo::CAppleDemo()" << std::endl;
    }
     
     
    CAppleDemo::~CAppleDemo()
    {
           //    std::cout << "CAppleDemo::~CAppleDemo()" << std::endl;
    }
     
    void CAppleDemo::fun1(void)
    {
        ShowMessage( "CAppleDemo::fun1()" );
    }
     
    void CAppleDemo::fun2(int a, int b)
    {
            ShowMessage( "CAppleDemo::fun2() a="+(String)a+",b="+(String)b );
    }
    
    int CAppleDemo::fun3(int a)
    {
            ShowMessage( "CAppleDemo::fun2() a="+(String)a);
    
        return a;
    
    }
    
    template<typename dst_type, typename src_type>
    dst_type pointer_cast(src_type src)
    {
        return *static_cast<dst_type*>(static_cast<void*>(&src));
    }
     
    template<typename dst_type, typename src_type>
    dst_type union_cast(src_type src)
    {
        union{
            src_type s;
            dst_type d;
        }u;
        u.s = src;
        return u.d;
    }
    
    typedef void (__fastcall *FunFun1)(void* pThis, int edx);
    typedef void (__fastcall *FunFun2)(void* pThis, int edx, int a, int b);
    typedef int  (__fastcall *FunFun3)(void* pThis, int edx, int a);
    
    typedef void (__fastcall *FunFunMain)(void* pThis, TObject *Sender);
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      //  CAppleDemo cAppleDemo;
    
    
        //    FunFun1 fun1 = pointer_cast<FunFun1>(&CAppleDemo::fun1);
        //    FunFun2 fun2 = pointer_cast<FunFun2>(&CAppleDemo::fun2);
        //    FunFun3 fun3 = union_cast<FunFun3>(&CAppleDemo::fun3);
    
       //    fun1(NULL, NULL);
       //    fun2(NULL, NULL, 11, 22);
       //    fun3(NULL, NULL, 33);
    
            FunFunMain pM =  union_cast<FunFunMain>(&TForm1::Button1Click);
            pM(NULL,Sender);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
              ShowMessage("Button1Click");
    }
    //---------------------------------------------------------------------------
  • 相关阅读:
    数据库事务4种隔离级别及7种传播行为
    Spring AOP深入剖析
    SQL语句-创建索引
    global文件中的application_start方法中做: 定时器
    细说ASP.NET Forms身份认证
    asp.net(C#)实现功能强大的时间日期处理类完整实例
    C# 文件操作类大全
    SQL Server Profiler:使用方法和指标说明
    分库分表原则 总结
    做软件与团队建设——对带研发团队和管理的总结
  • 原文地址:https://www.cnblogs.com/leochan007/p/13851887.html
Copyright © 2011-2022 走看看