首页 > 编程语言 >C++关于DLL导出模板类和模板函数

C++关于DLL导出模板类和模板函数

时间:2024-11-08 13:42:11浏览次数:5  
标签:int 导出 C++ DLL EXPORT template IM 模板

这两天写了个Dll,要导出普通类中的模板函数,稍微查了一下,没查到具体资料。自己根据C++模板的编译原理,推断出应该要源码放在头文件中直接导出,查了下接触的Open Source项目,确实如此。这里记录一下,方便下次查阅。

1、宏定义说明:

#ifdef DLL_PROJECT
#define  TEMPLATE_IM_EXPORT __declspec(dllexport)
#else
#define TEMPLATE_IM_EXPORT 
#endif
#ifdef DLL_PROJECT
#define  NORMAL_IM_EXPORT __declspec(dllexport)
#else
#define NORMAL_IM_EXPORT __declspec(dllimport)
#endif

分为普通的导入导出宏,和源码导出的情况。

2.头文件

template <typename T>   //模板类
class imexdll
{
public:
	T addit(T a, T b);
};
//当需要导出时,需要特例化需要导出的类型
template class TEMPLATE_IM_EXPORT imexdll<int>;  
 
//模板函数的导出
template<typename T>  int fn1(T t1, T t2);
//需要特化导出类型
template NORMAL_IM_EXPORT int fn1(int t1, int t2);
 
//普通函数/类的导出
NORMAL_IM_EXPORT int fn2(int a, int b);
 
//普通类中包含模板函数的情况,模板函数机械上src…… 没查到别的方法
class NORMAL_IM_EXPORT imexdll2
{
public:
	template <typename T>
	T add(T a, T b)
	{
		return a + b;
	}
};

3.源文件

#include "imexdll.h"
 
template <typename T>
T imexdll<T>::addit(T a, T b)
{
	T c = a + b;
	//cout << "sum:" << c << endl;
	return c;
}
template <typename T> int fn1(T t1, T t2)
{
	return t1 + t2;
}
int fn2(int a, int b)
{
	return a + b;
}

4.为何不担心普通类中模板函数泄露核心代码?

对于模板函数,正常其实现功能都是调用模板type 对应下的具体功能,所以只要将具体的type 对应的实现过程封装好,核心代码是不会泄露的。




源自:

https://blog.csdn.net/jerry_yu_1/article/details/120741848

标签:int,导出,C++,DLL,EXPORT,template,IM,模板
From: https://www.cnblogs.com/huvjie/p/18534900

相关文章

  • 为什么找不到vcruntime140_1.dll,无法继续执行代码的原因及五种有效解决方法
    vcruntime140_1.dll是微软VisualC++RedistributableforVisualStudio的一个动态链接库(DLL)文件。它是运行由VisualStudio2015及更高版本编译的C++应用程序所必需的。该DLL文件包含了支持C++标准库和Microsoft特定扩展功能的运行时函数,对于Windows应用程序......
  • d3dcompiler47dll丢失怎么解决lol
    d3dcompiler_47.dll是微软DirectX软件组件套件中的一个动态链接库(DLL)文件,扮演着至关重要的角色。DirectX是微软开发的一套用于多媒体应用,特别是游戏和高级图形处理的应用程序接口(API)。d3dcompiler_47.dll特别与Direct3D子系统相关,负责编译和优化用于Direct3D的着色器......
  • 电脑提示d3dcompiler_47.dll缺失怎么解决?五种方法快速修复存在问题!
    d3dcompiler_47.dll是微软DirectX软件组件套件中的一个动态链接库(DLL)文件,扮演着至关重要的角色。DirectX是微软开发的一套用于多媒体应用,特别是游戏和高级图形处理的应用程序接口(API)。d3dcompiler_47.dll特别与Direct3D子系统相关,负责编译和优化用于Direct3D的着色器......
  • win10找不到vcruntime140_1.dll,无法继续执行代码的解决方法
    vcruntime140_1.dll是微软VisualC++RedistributableforVisualStudio的一个动态链接库(DLL)文件。它是运行由VisualStudio2015及更高版本编译的C++应用程序所必需的。该DLL文件包含了支持C++标准库和Microsoft特定扩展功能的运行时函数,对于Windows应用程序......
  • c++多态学习:多态含义与使用
    目录 多态的概念多态的定义多态的实现注意事项 多态的概念多态是面向对象编程中的一个重要概念,它指的是同一个行为具有多个不同表现形式或形态的能力。在C++中,多态主要通过虚函数来实现,允许将子类类型的指针赋值给父类类型的指针,并在运行时根据实际对象类型调用相......
  • SVN提交日志模板设置
    前言:每次提交时都要手动输入很多固定日志信息,或者在最近中选择信息记录会比较麻烦,通过这个设置可以在每次提交时,自动填充日志信息设置步骤1:先进入你想要提交svn自动设置模板时的目录(例如策划同学进入到Table表格提交记录,程序同学进入到代码提交目录,美术同学进入资源提交目录)嫌麻......
  • 最新毕设-SpringBoot-求职推荐系统-55000(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    摘 要当前社会竞争激烈,求职市场信息众多,但信息不对称、筛选困难的问题依然存在。因此,设计开发一款求职推荐系统是顺应时代发展的必然选择。该求职推荐系统利用Java编程语言,使用springboot技术框架,采取MySQL数据库实现系统的各项功能,具有便捷高效、安全友好的特点,促进求职招聘......
  • C++:模拟实现STL的list
    目录一.list类1.list的创建节点2.list迭代器的运算符操作3.list的构造函数及析构4.list的迭代器5.list的插入及删除二.整体代码1.list.h2.list.cpp在上一节已经了解list在库中的用法,在这里实现list的底层逻辑一.list类1.list的创建节点template<classT>struc......
  • C++入门基础(一)
    目录C++关键字命名空间命名冲突例子域的概念理解命名空间定义例子1例子2例子3例子4例子5例子6例子7C++输出与输入输出输入感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接......
  • C++解倒三角问题
    题目描述输入一个整数打印数字图形。输入一个整数(0<n<10)输出一个数字图形样例输入 3样例输出 关于本题代码如下:#include<iostream>usingnamespacestd;intmain(){ intn,k,t=1; cin>>n;k=n; for(inti=1;i<=n;i++......