C++中类模板和实现分离的方法
来源:互联网 发布:java研发工程师南昌 编辑:程序博客网 时间:2024/06/10 02:02
C++中模板类的声明和实现分离问题
2017-08-29
有两种方式:
第1种:使用 .tpp 文件实现类模板的接口与实现的文件分离
在.h文件中放接口,在.tpp文件中放实现,但这种方法得在.h文件中,类的定义下面#include ".tpp"文件,如下:
//TestTemplate.h文件
#pragma once
template <typename T>
class TestTemplate{
public:
TestTemplate(const T& a): data(a){}
void print();//需要实现的方法
private:
T data;
};
#include "TestTemplate.tpp" //在类的定义下面放置#include ".tpp"文件
(其实,在这种情况下,实现文件TestTemplate.tpp文件,不一定要取这个名字,可以随便取个名字,如: abc.t、 xysearf.cod等都行,该行的作用实际上就是直接将代码包含进去,没什么太大的意义)
//TestTemplate.tpp文件
template <typename T>
void TestTemplate<T>::print(){
std::cout << "TestTemplate data: "<< data << std::endl;
}
//main.cpp文件
#include<iostream>
#include "TestTemplate.h"
int main(int argc, char **argv){
TestTemplate<int> a(static_cast<int>(3));
a.print();//输出 TestTemplate data: 3
TestTemplate<float> b(static_cast<float>(-3.1));
b.print();//输入 TestTemplate data: -3.1
cin.get();
return 0;
}
//输出结果
TestTemplate data: 3
TestTemplate data: -3.1
第2种:使用显式声明实现类模板的接口与实现的文件分离
在.h文件中放接口,在.cpp文件中放实现,然后在.cpp文件中显式的声明要使用的模板类实例,如下:
//TestTemplate.h文件
#pragma once
template <typename T>
class TestTemplate{
public:
TestTemplate(const T& a): data(a){}
void print();
private:
T data;
};
//TestTemplate.cpp文件
#include "TestTemplate.h"
#include<iostream>
template <typename T>
void TestTemplate<T>::print(){
std::cout << "TestTemplate data: "<<std::data<<endl;
}
template class TestTemplate<int>;//显式声明要使用的模板类实例
template class TestTemplate<float>;//显式声明要使用的模板类实例
(如果main.cpp文件中需要用到 TestTemplat<char>,那么只需要在TestTemplate.cpp文件中添加一行代码:template class TestTemplate<char>;)
//main.cpp文件
#include <iostream>
#include "TestTemplat.h"
using namespace std;
int main(int argc, char **argv){
TestTemplate<int>a(3);
a.print();//输出 TestTemplate data: 3
TestTemplate<float>b(static_cast<double>(-3.1));
b.print();//输入 TestTemplate data: -3.1
cin.get();
return 0;
}
//输出结果
TestTemplate data: 3
TestTemplate data: -3.1
总结
上面的两种方式,都可以实现类模板和实现相分类,但是相比之下,第1中方式更为简便。
阅读全文
0 0
- C++中类模板和实现分离的方法
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- C++中模板类的声明和实现分离问题
- C/C++--模板类实现.h和.cpp分离
- 14.c++-类模板不能让声明和实现分离
- 实现C++模板类头文件和实现文件分离的方法
- C++中模板类声明和实现能否分离?
- C++模板类头文件和实现文件分离的方法(vs2012测试)
- C++模板类头文件和实现文件分离的方法
- [C++]模板类的声明与实现分离问题
- C++模板应用——让模板定义和实现分离的方法
- 类模板中.h和.cpp的实现方法
- 类模板中.h和.cpp的实现方法
- 类模板中.h和.cpp的实现方法
- C 实现HANDLE和VIEW的分离
- C++函数模板声明和定义分离的方法
- HashSet,TreeSet,LinkedHashSet 的用法和区别
- 剑指offer(十三)调整数组顺序使奇数位于偶数前面
- 在有序但含有空的数组中查找字符串
- ZooKeeper原理浅析
- 拆分PDF文档需要什么软件?如何进行操作?
- C++中类模板和实现分离的方法
- 动态SQL
- get方式长度受限,如何将较长数据传递到后台
- delphi合并两个数组例子
- 文本框及 Combo Box内数据清除
- 二叉树 基本概念
- 关于解决 ORA-28595、ORA-06520 sql报错问题
- 第五篇 CSS入门 明白 三种嵌套形式,三种常用控制器
- SDWebImage 的使用