CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C++模板判断函数是否被定义

楼主vvvvy()2005-08-02 19:50:39 在 C/C++ / C++ 语言 提问

#include   "stdafx.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  struct   abc    
  {  
  int   i;  
  abc(int   ii):i(ii){}  
  unsigned   GetUnsignedHash(void);  
  };  
   
  unsigned   abc::GetUnsignedHash(void)  
  {  
  return   i;  
  }  
   
   
  template<class   T>  
  class   testclass  
  {  
  public:  
  T   testabc;  
  bool   testFun(void);  
  testclass(void);  
  ~testclass(void);  
  };  
   
   
   
  template<class   T>  
  testclass<T>::testclass(void):testabc(2)  
  {}  
   
  template<class   T>  
  testclass<T>::~testclass(void)  
  {}  
   
  template<class   T>  
  bool   testclass<T>::testFun(void)  
  {  
  #if   T::GetUnsignedHash   >   0   //怎么判断GetUnsignedHash有没有被定义  
  return   true;  
  #else  
  return   false;  
  #endif  
  }  
   
   
  int   main(int   argc,   char*   argv[])  
  {  
  testclass<abc>   ji;  
  cout<<ji.testFun()<<endl;  
  return   0;  
  }  
   
  //那个#if   后面不管填什么,testFun()都是返回   false,有没有什么方法改,请高手指教,  
  //就是判断   T::GetUnsignedHash   有没有被定义,而进行选择性编译  
  //希望能给出修改的方法,vc.net   2003   编译器 问题点数:20、回复次数:5Top

1 楼iamwindywolf(疾风之狼)回复于 2005-08-02 19:58:20 得分 5

不妨在定义这个函数的时候就#define一个宏,然后判断#ifdef就可以了啊.Top

2 楼021850524(吸血鬼牌卫生巾)回复于 2005-08-02 21:41:10 得分 5

//这样可以吗?  
   
  #include   "stdafx.h"  
  #include   <iostream>  
  using   namespace   std;  
   
  struct   abc    
  {  
  int   i;  
  abc(int   ii):i(ii){}  
  #ifndef   GET_UNSIGNED_HASH             //   宏GET_UNSIGNED_HASH表示此函数已经在别的地方定义过了.  
  unsigned   GetUnsignedHash(void);  
  #endif                      
  };  
   
  unsigned   abc::GetUnsignedHash(void)  
  {  
  return   i;  
  }  
   
   
  template<class   T>  
  class   testclass  
  {  
  public:  
  T   testabc;  
  bool   testFun(void);  
  testclass(void);  
  ~testclass(void);  
  };  
   
   
   
  template<class   T>  
  testclass<T>::testclass(void):testabc(2)  
  {}  
   
  template<class   T>  
  testclass<T>::~testclass(void)  
  {}  
   
  template<class   T>  
  bool   testclass<T>::testFun(void)  
  {  
  /*  
  #if   T::GetUnsignedHash   >   0   //怎么判断GetUnsignedHash有没有被定义  
  return   true;  
  #else  
  return   false;  
  #endif  
  */  
  #if   !defined   GET_UNSIGNED_HASH  
                    return   true;  
  #else  
                    return   false;  
  #endif  
  }  
   
  //   然后你就可以在你的编译器里决定是否编译宏包围的这段了.  
   
  int   main(int   argc,   char*   argv[])  
  {  
  testclass<abc>   ji;  
  cout<<ji.testFun()<<endl;  
  return   0;  
  }  
  Top

3 楼vvvvy()回复于 2005-08-02 22:02:58 得分 0

int   main(int   argc,   char*   argv[])  
  {  
  testclass<abc>   ji;  
  testclass<int>   jint;  
  cout<<ji.testFun()<<endl;  
  cout<<jint.testFun()<<endl;  
  return   0;  
  }  
  上面的我也想过,但不是我想要的,因为有的并没有定义那个函数,  
  如上面的   jint.testFun()   我要的返回   falseTop

4 楼mdj_boy(春秋文武)回复于 2005-08-03 09:29:46 得分 5

mark...Top

5 楼xuanwenchao(xuanwenchao)回复于 2005-08-03 09:51:38 得分 5

我也想知道,帮你顶顶顶!!!Top

相关问题

  • 初学者问题:C++函数模板
  • C++中函数模板和函数重载的关系
  • C#中时间判断的函数!
  • 模板函数
  • 函数模板
  • 有没有方法判断模板函数里参数的类型?
  • C++中如何在类外定义模板类内的模板函数?
  • 《C++Primer》函数模板习题的问题(100分)
  • 50分求解c++ primer中函数模板的问题
  • C++类模板是否支持内联函数啊?

关键词

  • template
  • testclass
  • getunsignedhash
  • testabc
  • testfun
  • 定义
  • abc
  • ji
  • unsigned
  • endif

得分解答快速导航

  • 帖主:vvvvy
  • iamwindywolf
  • 021850524
  • mdj_boy
  • xuanwenchao

相关链接

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

广告也精彩

反馈

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