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");
    }
    //---------------------------------------------------------------------------
  • 相关阅读:
    fis3解决web网站缓存问题
    C# 计算每周和每月固定日期
    移动端web页面上滑加载更多功能
    常见三种字符编码的区别:ASCII、Unicode、UTF-8
    ef AddDays报错
    .NET语言的编译过程:中间语言(IL)和即时编译器(JIT)
    ajax 传递数组类型参数后台接收不到的问题
    sql server 作业没跑、开启sql 代理服务、新建作业
    在javascript中NodeList和Array的区别及转换方法
    我经历的几种开发模式和心理
  • 原文地址:https://www.cnblogs.com/leochan007/p/13851887.html
Copyright © 2011-2022 走看看