【小记备忘】之模版编程传入常量类型时候的备忘template<char *>【2014.03.12】
2014-03-12 11:54
190 查看
【小记备忘】之模版编程传入常量类型时候的备忘template<char *>【2014.03.12】
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
代码为先:
看了代码,可能有的人有两个疑问:
1、为什么 TChars 的template<> 里面不是平常的 class T 或tepename T;
2、为什么 模版参数传的TChars<> 不是以平常的类型做参数,而是以一个变量作为参数。
原因嘛,这就是模版编程的另一种方式,传常量类型参数。
但是也有一些限制:
1、当为对象,不是是指针的时候,template<>里面是只能用 int, char shor等类型的;
2、如果是指针,又限制 不能为局部变量,而且需要在编译器能确定大小的指针常量(即代码中的dpd不能声明为char *,因为char *是无法在编译期确定大小长度的)
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
代码为先:
typedef char * pchar; template<pchar Tparam> class TChars{ public: TChars() { pc = new char[strlen(Tparam)+1]; strcpy(pc,Tparam); } pchar get(){return Tparam;} pchar pc; }; extern char dpd[40] = "qqqq"; extern const char *dpd2 = "qqqq"; int _tmain(int argc, _TCHAR* argv[]) { TChars<dpd> tc; cout << tc.pc; cout << tc.get(); cout << sizeof(TChars<dpd>); cout << sizeof(tc); return 0; }
看了代码,可能有的人有两个疑问:
1、为什么 TChars 的template<> 里面不是平常的 class T 或tepename T;
2、为什么 模版参数传的TChars<> 不是以平常的类型做参数,而是以一个变量作为参数。
原因嘛,这就是模版编程的另一种方式,传常量类型参数。
但是也有一些限制:
1、当为对象,不是是指针的时候,template<>里面是只能用 int, char shor等类型的;
2、如果是指针,又限制 不能为局部变量,而且需要在编译器能确定大小的指针常量(即代码中的dpd不能声明为char *,因为char *是无法在编译期确定大小长度的)
欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611
相关文章推荐
- Oracle之PL/SQL编程_数据类型与定义变量和常量
- STL源码剖析 08 基础-模板元编程 在编译期的时候做出计算和类型推倒等
- JNI编程参考备忘----基本类型
- 在使用mybaitis传参数的时候,仅传入一个类型为String的参数所遇到的问题
- c c++ 中 各种数据类型 取值溢出的时候 的方便记忆方法【2013.10.14小记】
- 【小记备忘】之简单的线程池的设计【2014.03.12】
- PHP编程之数据类型与常量的使用
- Oracle中Clob类型处理解析(NHibernate long值绑定long列,或者是直接oraclecommand的插入的时候报错都能用,ORA-01461:仅可以插入LONG列的LONG值赋值
- Swift 2.0 学习第1天:常量和变量, 数据类型,字符和字符串
- 使用集合接口的时候应该使用通用类型代替具体的实现类型
- Android JNI编程之基础学习(一) 认识c语言的基本类型,输出输入函数
- Delphi 2010学习笔记(4)---数据类型(常量)---2011-01-18
- 与接口相关的设计模式(2):代理模式、标识类型模式及常量接口模式
- java编程敲代码的时候你能保证单例是个单例了
- java—变量与常量 ,常用数据类型,数据类型转换
- 当我不再编程的时候
- 编程中无穷大常量的设定技巧
- PHP匹配当前传入是何种类型
- Java核心编程第三章java的基本数据类型及运算符的总结
- Java基础编程10-各种类型的转换