C++使用模板并隐藏实现
来源:互联网 发布:网络教育考公务员 编辑:程序博客网 时间:2024/06/15 16:10
我们在用C++模板的时候,通常要把实现写在头文件里,如果项目中模版很多的时候,会造成编译速度很慢,如果你用过boost的话,你就深有体会了。
为了使用模板并隐藏实现从而加快编译速度,或者是其他的一些不可告人的目的(我怎么能拿这么黑暗的思想揣摩程序员)。
这里介绍一个好方法,是借鉴了PCL(point cloud library)中的实现。
template_export_class工程
template_define.h//头文件
#pragma once//比较low的写法,懒得改了
template<class T>
class Calcuate//计算类,这里只有声明
{
public:
Calcuate();
virtual ~Calcuate();
T add(T lhs, T rhs);
private:
T a, b;
};
template_export_class.cpp//源文件
#include "template_define.h"
#include "export.h"
template<class T>
Calcuate<T>::Calcuate()
{
}
template<class T>
Calcuate<T>::~Calcuate()
{
}
template<class T>
T Calcuate<T>::add(T lhs, T rhs)
{
return lhs + rhs;
}
注意,如果你这样写了,被其他库引用的时候必然会报链接错误,这时就需要模板特化并导出了
#define INSTANTIATE(T) template class TEMPLATE_EXPORT Calcuate<T>;
INSTANTIATE(int)
INSTANTIATE(float)
INSTANTIATE(double)
TEMPLATE_EXPORT是导出宏
#ifdef TEMPLATE_EXPORT_CLASS_EXPORTS
#define TEMPLATE_EXPORT __declspec(dllexport)
#else
#define TEMPLATE_EXPORT __declspec(dllimport)
#endif
不会的面壁去
这时其他库引用就没有问题了
template_export_test工程
main.cpp//测试代码
#include "..\template_export_class\template_define.h"
#include <iostream>
int main()
{
Calcuate<int> cal;
int x = cal.add(1, 2);
std::cout << x << std::endl;
Calcuate<float> cal2;
float x2 = cal2.add(1.0f, 3.0f);
std::cout << x2 << std::endl;
}
当然这里只特化了int, float, double三个类型,其他类型就报错了,因为其他类型并没有被导出
- C++使用模板并隐藏实现
- C/C++使用模板实现数据栈
- C++,MD5算法的实现类,使用了模板技巧
- 新建登录页并实现tabBar隐藏
- PyQt4隐藏菜单栏并实现拖动
- C++-使用模板解决问题
- css自动隐藏内容,并使用‘...’代替
- C++_模板举例_使用模板实现集合类(堆栈)
- C++_模板举例_使用模板实现集合类(堆栈)
- 使用模板实现多态性
- 使用APIHOOK实现进程隐藏
- C语言实现stack模板
- C语言实现函数模板
- [c++]栈模板的实现
- c++::用模板实现List
- 【c++】模板实现动态Vector
- express3.0安装并使用layout模板
- express3.0安装并使用layout模板
- 【进阶篇】Android学习笔记——TextInputLayout
- java最简单方法配置统一异常页面
- Volley 的介绍和使用(一)
- Delphi 三层框架开发客户端开发
- 全排列_蓝桥杯问题+一点对递归的看法
- C++使用模板并隐藏实现
- HTML5新控件 - 日期和时间选择输入
- KVC中setValuesForKeysWithDictionary 崩溃问题
- Android 开关机动画
- ShareSDK For IOS
- 细数iOS上那些你绝对不会注意到的神细节
- caffe代码阅读5:Layer的实现细节-2016.3.17
- apache tomcat 集群
- python 刷题:二维数组中的查找