文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>union中存放函数地址

union中存放函数地址

时间:2010-06-13  来源:wwm

最近项目中用到,union关联多个函数问题。感觉有些虚函数的妙处。

#include <stdio.h>
#include <string.h>


typedef void (*FUN)(); //空函数类型。用于指针转换。类似虚函数
typedef void (*FUN1)(int a);
typedef int (*FUN2)(int a,int b);
typedef char * (*FUN3)(char* a);

typedef struct {
    int a;
    union{    //在结构内只有一个函数地址
    FUN fun;
    FUN1 fun1;
    FUN2 fun2;
    FUN3 fun3;
    };
}ST_FUN;

void f() //空函数。用于指针转换
{
 
}

void f1(int f)
{
printf("size ==%d\n",f);
}

int f2(int a,int b)
{
    return (a+b);
}

char * f3(char *a)
{
return a;
}

ST_FUN funcs_list[]={  //定义时候要转换 为虚的
        {1,(FUN)f1},
        {2,(FUN)f2},
        {3,(FUN)f3},
    };
int main(int argc, char ** argv)
{

    funcs_list[0].fun1(345);   //直接使用了。这点不同于虚函数
    int f = funcs_list[1].fun2(1,2);
    printf("ok ---%d\n",f);
    char *p = funcs_list[2].fun3("wwm");
    printf("ok ---%s\n", p);
    printf("ok ---end\n");
    return 0;
}


//////////以下是类函数指针/////////////////////////////////////////////
#include <stdio.h>
#include <string.h>

class TEST;
typedef void (TEST::*FUN)(); //空函数类型。用于指针转换
//或者    typedef void (*FUN)();
typedef void (TEST::*FUN1)(int a);
typedef int (TEST::*FUN2)(int a,int b);
typedef char * (TEST::*FUN3)(char* a);
typedef struct {
    int a;
    union{  
    FUN fun;
    FUN1 fun1;
    FUN2 fun2;
    FUN3 fun3;
    };
}ST_FUN;

void f() //空函数。用于指针转换
{
 
}

class TEST
{
    public:
       
        void f1(int f)
        {
            printf("size ==%d\n",f);
        }
       
        int f2(int a,int b)
        {
            return (a+b);
        }
       
        char * f3(char *a)
        {
            return a;
        }
};
ST_FUN funcs_list[]={
        {1,(FUN)&TEST::f1},
        {2,(FUN)&TEST::f2},
        {3,(FUN)&TEST::f3},
    };
int main(int argc, char ** argv)
{
TEST test;
(test.*(funcs_list[0].fun1))(345);
    int f = (test.*(funcs_list[1].fun2))(1,2);
    printf("ok ---%d\n",f);
    char *p = (test.*(funcs_list[2].fun3))("wwm");
    printf("ok ---%s\n", p);
    printf("ok ---end\n");
    return 0;
}




相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载