关于Template
来源:互联网 发布:windows键没反应 win10 编辑:程序博客网 时间:2024/06/03 19:30
关于Template小知识
Template并非一次编译便生成所有所有型别的代码<也不可能做到,任意一种自定义类型的结构>,而是针对被使用的某个(或某组<偏特化>)型别进行编译。摘自C++标准程序库,<里面内容为个人所加>。
即表明Template是运行时编译的,这个时候Template Function 也必须定义在头文件中(编译器需要找到明确的函数定义并实例化),不能像其他明确的 Function、Class 可以分别在头文件和.CPP文件中存放。
关键字 typename 除了可以在声明型别中起使用,还有另外一种用法。考虑下面例子:
template<class T>class MyClass{ typename T::SubType * ptr; ...};
在这里T必须得是一个复合类型,且里面有类型SubType,例如:
class T{ typedef int SubType;};
此外还有成员模板
example 1class MyClass{ template<class T> void f(T);};example 2template<class T>class MyClass{ template<class U> MyClass (const MyClass<U> &x);};
需要注意的是在这里Template Constructor 并不会覆盖 implicit constructor(默认构造函数,毕竟只是个 template).这里补充一下 Template Constructor的作用是可以用不同类型的对象来初始化本对象。
例如Myclass<int> my(Myclass<float>());
这是合法的,如果 Copy Constructor 非 template 则这是非法的。
当然 Template Class 也可以像函数一样“带默认形参值”.
注:仅有Tempalte Class才可以,Template Function 是不可行的。
例如:
#include<iostream>#include <typeinfo.h>using namespace std;template<class T,class B = int>class test{public: static void fun() { T a; B b; cout<<typeid(a).name()<<endl; cout<<typeid(b).name()<<endl; }};int main(){ test<float>::fun(); return 0; }
运行结果下图所示:
0 0
- 关于template
- 关于Template
- 关于template的使用
- 关于SUBPARTITION TEMPLATE
- 关于template的用法
- 关于 template <typename T>
- 关于模板template
- 关于string 的template
- 关于C++ template的定义
- 关于C++ template 的初始化
- 关于json template一点思考
- 关于C++ template 的初始化
- 关于C++Template的理解:
- template
- Template
- template
- template
- template
- 最清晰的Android多屏幕适配方案
- AFnetWorking的一个bug
- C++编程入门系列之四十九(多态性:纯虚函数和抽象类)
- HTTP缓存
- 图像的载入、显示和输出示例
- 关于Template
- mysql-5.7.16-winx64.zip安装教程
- 整型和字符串判断
- NDK-CPP语言-queue队列+stack栈+list+set+map
- C/C++中读取文件判断是否读取结束
- Java单例模式 完整版
- 设计模式--备忘录模式
- Maven学习:Eclipse使用maven构建web项目
- 在Visual Studio 2008补全代码功能