//<span style="font-family:'Microsoft YaHei';">TemplateLib.h</span><span style="font-family:'Microsoft YaHei';">使用动态库</span>
#ifdefTEST_DLL_EXPORTS
#define TEST_API__declspec(dllexport)
#else
#define TEST_API__declspec(dllimport)
#endif
// 导出模板函数
template<typename T1>
TEST_APIvoidfun1(T1);
template<typename T1,typename T2>
TEST_APIvoidfun2(T1 , T2);
// 模板类
template<typename T,int size>
class TEST_APICTest
{
public:
CTest() {};
~CTest(){};
T*GetDataBuff() { return m_data;}
private:
T m_data[size];
};
// TemplateLib.cpp : 定义 DLL 应用程序的导出函数。
#include "stdafx.h"
#include "TemplateLib.h"
// 1.利用重载来实例化不同类型的模板,代码量大不说,基本上是重复的代码
// 2.库的设计者不知道用户会传入什么类型,也就是说设计者不可能实例化每一种类型的模板。
TEST_APIvoid fun1(int var1) {}
TEST_APIvoid fun1(char var1){}
template<typename T1,typename T2>
TEST_APIvoid fun2( T1 var1, T2 var2){}
// 这个名字空间不作为导出使用,唯一作用是用来例化函数模板和类模板.
namespace implement_template_private
{
voidimplement_template()
{
int idata = 10;
charchr = 'x';
float fdata = 20.f;
UINTundata= 9;
char* str = "hello";
// 这种方式的实例化,代码量比重载方式少许多,但需运行一次该模板函数
// 也许在某些时候凭空运行这个函数是不合理的。
fun2(idata,chr);// int,char
fun2(undata,str); // UINT,char*
fun2<float,char*>(fdata,str); // float,char* 显示参数
// 导出类的实例化。
// 1.除了要实例化提供给用户使用的公有成员函数外,这里面还隐含的实例化了构造函数和析构函数.
// 2.注意这里每一个模板的实例化都是唯一的。
// 3.假如客户如果在项目中使用了CTest<char,30> impl_obj; 将会连接错误, 模板的参数列表必须完全匹配。
// 4.假如该模板类非常大,功能非常多,那么实例化工作可以想象是不堪忍受的。
// 5.库的设计者不知道用户会传入什么类型,也就是说设计者不可能实例化每一种类型的模板。
CTest<char,20>impl_obj;
impl_obj.GetDataBuff();
CTest<int,5>impl_obj2;
impl_obj.GetDataBuff();
}
};
//
// TemplateExport.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "..\TemplateLib\TemplateLib.h"
#pragma comment(lib,"TemplateLib.lib")
int _tmain(int argc, _TCHAR* argv[])
{
fun1<int>(10);
fun1<char>('x');
//fun1<float>(20.f);// 连接错误
fun2<float,char*>(20,"hello");
//fun2<int,int>(20,30); // 连接错误
CTest<char,20> test;
char* ret = test.GetDataBuff();
//CTest<char,30> test2; // 连接错误
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有