函数模板和类模板
来源:互联网 发布:网页设计软件培训 编辑:程序博客网 时间:2024/05/16 15:15
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__
- 模板函数和模板类
- 函数模板和类模板
- 类模板和函数模板
- 函数模板和类模板
- 类模板和函数模板
- 模板函数和类模板
- 函数模板 和类模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 类模板和函数模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- 模板的概念 ---模板分两类:函数模板和类模板
- ambari在移动namenode的时候出现两个备用的namnode
- 用visual_studio编写c51单片机程序
- js操作表单
- 开通了CSDN博客
- 自定义样式的单选、多选按钮逻辑
- 函数模板和类模板
- nginx fastcgi cache详解
- Mysql索引实现
- 一些常用的小玩意之dubbo
- 有bug的KMP
- 共用体的应用(判断端序)
- 使用python调用java-jpype
- springboot注解
- docker安装与实现myql主从复制