如何用VC自动生产静态函数指针数组

yyj1982 2010-08-20 09:46:09
问题是这样的,现在有一大堆函数,函数的原型是一样的。例如,原型为:void fun(void);
现在要把这些函数复制给一个静态函数指针数组。由于这个静态数组很大,所以求一种自动生成方法。

例如:
void fun1(void)
{
}

void fun2(void)
{
}

void fun2(void)
{
}

typedef void (*FUN)(void);
static FUN FunArray[] =
{
fun1,
fun2,
fun3
};

加入FunArray很大,如何自动生成上面的静态数组初始化代码?
...全文
134 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
muzizongheng 2010-08-23
  • 打赏
  • 举报
回复
用CMap。

动态SetAt。

关键字可以为函数名的字符串, 值为函数指针。。


这个map和系统建立的消息映射相似。
qiangorqiang 2010-08-23
  • 打赏
  • 举报
回复
建议用UE来手工完成。
首先通过正则表达式把所有函数找到,然后批量把函数加进去。
zgl7903 2010-08-23
  • 打赏
  • 举报
回复
做成DLL, GetProcAddress可以接受字符串
job82824 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhouzhipen 的回复:]
引用 11 楼 job82824 的回复:
这个我原先也遇到过的,就是类的同一功能的成员函数太多,于是想用函数指针的。但是遇到了一个问题,放弃了。
C/C++ code

void func1();
void func2();
...
void main()
{
void (*ff)(void) = NULL;
char myExecute[80]={NULL};
for(i……
[/Quote]
VB有个ExecuteLine(),我想VC也会有?
zhouzhipen 2010-08-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 job82824 的回复:]
这个我原先也遇到过的,就是类的同一功能的成员函数太多,于是想用函数指针的。但是遇到了一个问题,放弃了。
C/C++ code

void func1();
void func2();
...
void main()
{
void (*ff)(void) = NULL;
char myExecute[80]={NULL};
for(int i=0;i<20;i+……
[/Quote]

C是编译型语言,不是解释型的,怎么可能自动实现这个功能,除非你自己解析。
zgl7903 2010-08-23
  • 打赏
  • 举报
回复
是否可以考虑使用汇编的 REPEAT 宏功能来初始化
job82824 2010-08-23
  • 打赏
  • 举报
回复
这个我原先也遇到过的,就是类的同一功能的成员函数太多,于是想用函数指针的。但是遇到了一个问题,放弃了。

void func1();
void func2();
...
void main()
{
void (*ff)(void) = NULL;
char myExecute[80]={NULL};
for(int i=0;i<20;i++)
{
sprintf(myExecute,"ff=func%d",i);
myExecute;//这个地方怎么搞才能让编译器将字符串作为一句代码来执行呢?
}
}

关注ing
na2650945 2010-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iyaosan 的回复:]

C/C++ code



static int arrayposition=0;
typedef void (*FUN)(void);
#define MAXARRAY 1000
static FUN FunArray[MAXARRAY] =
{

};



struct cfun1
{
cfun1()
{
FunArray[arrayposition++]……
[/Quote]
构造函数。
把功能函数封装到类中。
na2650945 2010-08-21
  • 打赏
  • 举报
回复
没明白LZ什么意思。
帮顶。
hztj2005 2010-08-21
  • 打赏
  • 举报
回复
学习学习
yyj1982 2010-08-20
  • 打赏
  • 举报
回复
借助template在编译器自动展开是不是可以实现?
yyj1982 2010-08-20
  • 打赏
  • 举报
回复
楼上的代码如何自动生成呢?没看懂,能不能简单说明一下。
pjl110 2010-08-20
  • 打赏
  • 举报
回复
这个问题我以前也考虑过,不过我得出的结论是好像不能自动添加吧!

逻辑上是矛盾的!

不过既然函数的形式都是void func(void),你就用拷贝粘贴加替换吧!
  • 打赏
  • 举报
回复



static int arrayposition=0;
typedef void (*FUN)(void);
#define MAXARRAY 1000
static FUN FunArray[MAXARRAY] =
{

};



struct cfun1
{
cfun1()
{
FunArray[arrayposition++]=fun1;
}
static void fun1(void)
{
}
} cFun1_;



int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}



  • 打赏
  • 举报
回复
static int arrayposition=0;
typedef void (*FUN)(void);
static FUN FunArray[MAX] =
{

};



struct cfun1
{
cfun1()
{
FunArray[arrayposition++]=fun1;
}
static void fun1(void)
{
}

}
第1章 语言基础 1 1.1 基础语句 2 0001 注释的使用方法及注意事项 2 0002 使用汇编语言 2 0003 如何使用内联函数 2 0004 如何使用#define自定义宏 3 0005 使用goto语句进行无条件跳转 3 0006 while循环转为for循环 3 0007 do while循环的分析与使用 4 0008 利用条件运算符简化代码 4 0009 使用exit函数退出进程 5 0010 函数exit的注意事项 5 0011 调试无限循环 5 0012 控制台输入/输出 5 0013 delete与delete []的差别 6 0014 符号#、##、#@的用法 6 0015 将某个地址转换为指针 6 0016 常用内存分配及释放函数 6 0017 生成小于100的随机数 7 1.2 类型与变量 7 0018 静态变量的定义及应用 7 0019 使用全局变量的注意事项 7 0020 如何使用全局对象 7 0021 变量作用范围 8 0022 创建自己的变量类型 8 0023 如何声明同样类型的多个变量 8 0024 extern关键字的使用 9 0025 const关键字的应用范围 9 0026 去除const属性的转换 9 0027 使用enum定义类型 10 0028 定义只有零个元素的数组 11 0029 利用零进行初始化的对象 11 0030 初始化数组的简单方法 11 0031 结构体的字节对齐 11 1.3 模板与函数 12 0032 成员函数的模板不可以是虚函数 12 0033 利用递归函数计算阶乘 12 0034 函数模板的应用 13 0035 使用指针数组 13 0036 函数指针数组的应用 13 0037 函数重载的注意事项 14 0038 使用typename关键字 14 1.4 引用 14 0039 使函数返回多个值 14 0040 如何使用引用 15 0041 如何应用值传递参数 15 0042 赋值与初始化的区别 16 0043 如何初始化左值 16 1.5 名称空间 16 0044 为什么使用命名空间 16 0045 如何定义及访问命名空间 16 0046 利用命名空间解决命名冲突 17 0047 名称空间简单应用 18 0048 使用:: 运算符调用全局函数 18 0049 :: 使用命名空间的注意事项 18 1.6 继承 19 0050 两个类互为成员的声明 19 0051 为什么要避免直接存取数据成员 19 0052 避免使用memset初始化对象 19 0053 C++类中成员初始化的顺序 19 0054 基类的析构函数应该是虚方法 20 0055 访问限定符分析 21 0056 访问其他类的私有成员函数 21 0057 如何定义友员类 22 1.7 多态 23 0058 纯虚函数的使用 23 0059 覆盖基类的成员函数 23 0060 如何应用多重继承 24 0061 如何利用虚函数实现动态绑定 25 0062 如何利用抽象类进行数据封装 25 0063 数据类型与类对象大小的区别 26 0064 实现类的强制转换 26 1.8 高级函数 27 0065 如何重载操作符 27 0066 如何定义重载函数 28 0067 默认构造函数 28 0068 复制构造函数 28 0069 this指针分析 29 0070 如何用非静态的类成员函数作为线程函数 29 0071 如何在常量函数中修改数据成员 30 1.9 STL模板库 30 0072 为什么在程序中广泛使用STL 30 0073 如何在STL中使用容器 30 0074 STL算法的优点 31 0075 如何设计和使用STL迭代器 31 0076 使用STL需要包含哪些头文件 32 0077 STL简单应用 32 1.10 C++.NET语法 33 0078 在C++.NET中如何判断空指针 33 0079 C++与C++.NET中纯虚函数的区别 33 0080 C++.NET中数据类型转换的方法 33 0081 在C++.NET中如何定义具有输出参数的函数 33 0082 C++.NET中如何实现方法的默认参数 33 0083 在C++.NET中如何获取系统信息 34
资源介绍:手册编写: 吴涛  Liigo  云外归鸟  邓学彬  龚辟愚  王家元 官方手册: 00.易语言支持库开发包   01.支持库实际上是一个DLL动态连接库   02.支持库LIB_INFO数据结构   03.LIB_INFO成员详细说明   04.易语言的数据类型及数据存储方式   05.接收来自易语言的通知   06.支持库常量说明   07.易语言IDE系统添加辅助功能   08.定义并实现全局命令   09.支持库自定义数据类型   10.自定义数据类型的所属成员函数   11.定义普通数据类型(非窗口单元、菜单)   12.定义窗口单元数据类型   13.支持库升级和调试 命令实现: 传递参考型参数   传递参考型变量或数组   传递参考型数组参数   传递变量或数组参数   传递复合数据类型参数   传递数组型参数   传递窗口单元数据类型参数   无限参数命令   特殊命令置入代码   返回复合数据类型数据   返回数组命令   返回通用型数据 自定义类型: 01.自定义数据类型   02.定义成员函数   03.成员函数_构造   04.成员函数_析构   05.成员函数_复制对象   06.定义普通数据类型   07.定义窗口单元数据类型   08.窗口单元属性   09.窗口单元事件   10.窗口单元的对外接口   11.窗口单元创建   12.窗口单元属性更新   13.窗口单元属性自定义数据   14.窗口单元属性被修改   15.窗口单元获取属性   16.窗口单元获取全部属性   17.窗口单元按键信息   18.窗口单元触发事件   19.窗口单元实现注意事项 辅助函数: 01.易语言通知函数   02.分配内存   03.释放内存   04.分配文本数据指针   05.分配字节集数据指针   06.分配数组数据指针   07.取窗口单元指针   08.取回数据类型的类别   09.取数组数据部分首地址及成员数目   10.报告运行时错误 静态编译: 01.支持库静态编译改造   02.修改函数名称和符号导出方式   03.系统通知的函数中返回特定的信息   04.去除库定义相关信息   05.VC6中的具体操作   06.静态支持库的发布   07.迷你版的CFreqMem类 资源界面:资源下载:

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧