CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

函数指针问题

楼主xbt746(头上无毛)2006-03-17 15:35:11 在 C/C++ / C++ 语言 提问

声明了一个函数指针,而指向的函数的参数类型不确定  
        指向的目标可能是多个函数,而这些函数的参数类型都不一样  
  现在只考虑参数的个数是相同的  
        如果参数个数不同?还能实现吗?  
  实现了加分!!!!! 问题点数:100、回复次数:23Top

1 楼iambic()回复于 2006-03-17 15:38:32 得分 14

传递void指针,拿到后强制类型转换。Top

2 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 15:45:45 得分 2

挺困难的。不如封装个仿函数对象。  
   
  class   function  
  {  
          HRESULT   PushParam(void*   p);  
          HRESULT   call();  
  }Top

3 楼shine51151(美丽心情)回复于 2006-03-17 15:45:52 得分 5

定义void型指针   然后调用哪个就强制类型转换成哪个   参数个数不一致的话就不清楚了   能力有限啊   不好意思Top

4 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 15:46:18 得分 2

faint,还让我给写错了。加个()重载。Top

5 楼firetoucher(风焱)回复于 2006-03-17 15:49:18 得分 5

晕,如果传入的参数是类或者结构又怎么办,如果传入的参数又是一个函数指针又怎么办?  
  介个......你的道道画的大一点了吧。  
   
   
  FT  
  --  
  Anything   one   man   can   imagine,   other   men   can   make   real.Top

6 楼xbt746(头上无毛)回复于 2006-03-17 17:56:15 得分 0

传入的参数范围是int,bool,指针这些基本类型  
        呵呵,我知道有些难  
  ,所以请大侠帮忙啊Top

7 楼sjjf(水晶剑锋)回复于 2006-03-17 19:03:20 得分 5

建议:优先考虑重载,  
  如果没法重载,那就所有的函数都用变参吧。这样应该能保证转化后"参数一致"  
   
  Top

8 楼xbt746(头上无毛)回复于 2006-03-17 19:35:18 得分 0

函数都是给定的,无法改变  
        我用了函数指针转换,但是,在函数中运算的,都是地址在运算  
  能不能用指针转换,但在函数中运算的是值而不是地址呢Top

9 楼xbt746(头上无毛)回复于 2006-03-17 19:35:27 得分 0

加分了Top

10 楼sjjf(水晶剑锋)回复于 2006-03-17 22:01:33 得分 30

 
  int   abc(int   i   ,int   j)  
  {  
  cout<<"\n   abc   exec"<<i<<"asldkjfjke"<<j;  
  return   i+j;  
  }    
   
  int   edf(double   i   ,int   j,int   e)  
  {  
  cout<<"\n   edf   exec"<<i<<"---"<<j<<"===="<<e;  
  return   i+j;  
  }    
   
   
  int   main(int   argc,   char*   argv[])  
  {  
  void   *   pFunc;  
   
   
  pFunc   =   abc;  
   
  ((int   (*)(int,int))pFunc)(1,2);  
   
  pFunc   =   edf;  
   
  ((int   (*)(double   ,int   ,int   ))pFunc)(1.22,3,4);  
   
  }  
   
   
   
   
   
  如果不合要求,  
  把你的要求用代码的形势表达出来吧。  
  给个具体的例子(scene),告诉别人你要干吗,  
  单凭想象我无法想象出来你要干吗,  
   
  Top

11 楼ugg(逸学堂(exuetang.net))回复于 2006-03-18 10:34:10 得分 5

函数指针不是万能的,  
  如果函数指针不能解决问题,那么考虑自己设计是不是有问题,通过  
  设计避免这中问题。Top

12 楼fangrk(加把油,伙计!)回复于 2006-03-18 10:47:59 得分 5

如果有好的办法,告诉我一下。Top

13 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-18 10:50:06 得分 5

你可以去研究一下MFC的消息映射函数……Top

14 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-18 12:10:57 得分 0

好像Boost中有一个Function   Object。这是一个模板类,可以实例化任何原型的函数。函数的原型是作为模板参数的。我觉得可以看看.Top

15 楼zncn2(embedded system)回复于 2006-03-18 13:07:17 得分 0

markTop

16 楼sjjf(水晶剑锋)回复于 2006-03-18 14:20:25 得分 3

boost好像花费了很大的力气实现了类似java的反射机制,但是没有研究过。Top

17 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2006-03-18 16:41:24 得分 3

模板  
  重载Top

18 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2006-03-18 16:50:03 得分 2

不一定要用函数指针啊。  
   
  template   <int   v>  
  struct   Int2Type{  
          enum   {   value   =   v   };  
  };      
   
  把那些函数重载,再用函数来根据模板中的整型参数调用对应某个函数。Top

19 楼xbt746(头上无毛)回复于 2006-03-18 17:31:47 得分 0

typedef   int(SQRTPROC)(void   *,void   *);  
  HINSTANCE   hInstance;  
  SQRTPROC   *pFunction;  
  hInstance=LoadLibrary("CDllTemp.DLL");  
  if(hInstance!=NULL)  
  {  
            pFunction=(SQRTPROC   *)::GetProcAddress(hInstance,"Add");  
                    if(pFunction!=NULL)  
    {  
                                                m_total=(*pFunction)(&m_add1,&m_add2);  
    }  
            FreeLibrary(hInstance);  
  }  
  主要是想实现动态载入dll中的函数,而dll中的函数的参数类型又是不确定的  
  所以想用函数指针实现,大家的建议都很好,现在在期待更好的解决方法Top

20 楼sjjf(水晶剑锋)回复于 2006-03-18 18:50:43 得分 2

 
  如果你想做到象反射一样的功能的话:根据传入的函数名字调用函数。  
  你还是问问,有没有精通boost的人吧,  
  这个问题java解决起来比较简单,  
  但是c/cpp就比较麻烦了。  
  听说boost用stl解决的。  
  两者的机制完全不一样,  
  没有研究过boost,不能给你答案Top

21 楼sjjf(水晶剑锋)回复于 2006-03-18 19:45:37 得分 2

http://www.codeproject.com/library/libreflection.asp  
  不知道这篇文章对你有没有帮助Top

22 楼sinkileu(小心)回复于 2006-03-18 20:21:50 得分 5

参数个数的问题可以用给参数提供默认值的方法解决吧?Top

23 楼guyanhun(老婆说的都是对的!努力做个好老公!)回复于 2006-03-18 20:33:49 得分 5

根据传入的函数名字调用函数   ?  
   
  这让我想到了stl   中的mapTop

相关问题

  • 函数指针
  • 指针函数
  • 函数指针
  • 函数指针
  • 函数指针
  • 函数指针和指针函数
  • 函数指针,唉.......
  • 函数指针的问题
  • 函数指针怎么用?
  • 函数指针的问题

关键词

  • 函数
  • 指针
  • 转换
  • 解决
  • boost
  • 参数
  • 重载
  • 传入
  • pfunction
  • 个数

得分解答快速导航

  • 帖主:xbt746
  • iambic
  • healer_kx
  • shine51151
  • healer_kx
  • firetoucher
  • sjjf
  • sjjf
  • ugg
  • fangrk
  • jiangsheng
  • sjjf
  • guyanhun
  • guyanhun
  • sjjf
  • sjjf
  • sinkileu
  • guyanhun

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo