函数模板和类模板
来源:互联网 发布:centos 启动php 编辑:程序博客网 时间:2024/05/17 01:46
1、函数模板
template <class 形参名,class 形参名,......>
返回类型 函数名(参数列表){函数体}
其中template和class是关键字,class可以用typename关见字代替,在这里typename和class没区别,<>括号中的参数叫模板形参,模板形参和函数形参很相像,模板形参不能为空。一但声明了模板函数就可以用模板函数的形参名声明类中的成员变量和成员函数,即可以在该函数中使用内置类型的地方都可以使用模板形参名。模板形参需要调用该模板函数时提供的模板实参来初始化模板形参,一旦编译器确定了实际的模板实参类型就称他实例化了函数模板的一个实例。
例如:
template<typename T>
inline void Singleton<T>::release()
{
if (t)
{
delete t;
t = NULL;
}
}
2、类模板
template<class 形参名,class 形参名,…>
class 类名{ ... };
类模板和函数模板都是以template开始后接模板形参列表组成,模板形参不能为空,一但声明了类模板就可以用类模板的形参名声明类中的成员变量和成员函数,即可以在类中使用内置类型的地方都可以使用模板形参名来声明。
例如:
template <typename T>
class Singleton
{
public:
inline static T* getInstance();
inline static void release();
virtual void initData(){};
private:
static T* t;
};
3、类模板的单例和函数模板的实现
#ifndef __SINGLETON_H__
#define __SINGLETON_H__
//类模板
template <typename T>
class Singleton
{
public:
inline static T* getInstance();
inline static void release();
virtual void initData(){};
private:
static T* t;
};
//函数模板
template <typename T>
inline T* Singleton<T>::getInstance()
{
if (!t)
{
t = new T;
t->initData();
}
return t;
}
template<typename T>
inline void Singleton<T>::release()
{
if (t)
{
delete t;
t = NULL;
}
}
//参数初始化
template <typename T>
T* Singleton<T>::t = NULL;
#endif // __SINGLE_H__
- 模板函数和模板类
- 函数模板和类模板
- 类模板和函数模板
- 函数模板和类模板
- 类模板和函数模板
- 模板函数和类模板
- 函数模板 和类模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 类模板和函数模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- 欢迎使用CSDN-markdown编辑器
- 窗口刷新 Invalidate UpdateWindow RedrawWindow
- java面试资料—多线程
- Dubbo接口报Error的情况(未解决)
- checkbox 颜色修改
- 函数模板和类模板
- Gruntfile.coffee
- mapreduce的缓存(addCacheFile)使用
- decimal 后面的后缀M的意思
- C# string.Format 格式化使用说明
- 音视频实时传输错误掩盖算法
- Oracle存储过程
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- C#操作Access时Parameters集合的使用方法