dll 和 template(cegui中遇见的小问题,对解决任何问题没有任何帮助,仅记录)

模板显式实例化 explicit template instantiation 众所周知,C++中模板的声明与定义分离时 阅读详情

cegui和ogre中的单件都是通过继承一个模板类Singleton来做的。

ogreSingleton.h为template <typename T> class Singleton;

ceguiSingleton.h是template <typename T> class CEGUIEXPORT Singleton;

 

1.ceguiSingleton.h中去掉CEGUIEXPORT 会导致联机编译IncrediBuild中一片黄色,警告信息为

 warning C4661: 'CEGUI::MouseCursor *CEGUI::Singleton<T>::ms_Singleton' : no suitable definition provided for explicit template instantiation request不知道是嘛意思~知道的大侠帮忙解释一下吧~

 

2.为保持一致~老大让用cegui的singleton,但是好像不能从dll中导出模板是吧?原因是什么?这方面的问题网上也讨论的很多,但是我没找到重点,还是没弄懂。

3.然后自己在头文件里抄了个singleton,忘了当时为什么要加上导出宏了。。。就是CEGUIEXPORT 类似的东西。好像就是“1.”中的问题了~也许在dll内部getSingleton的时候会警告~

4.加上了导出宏(CEGUIEXPORT )后,外部好像又链接不能识别的外部符号了。。。。这个大致知道怎么解决,但是不知道为什么,希望高手解答,过程是cegui的system是单件,但是不能new,构造私有,外部只能通过一个接口create来调用私有的构造函数,而system也覆盖了getSingleton和getSingletonPtr的方法,外部还是没有看到单件,而cegui一些其他的单件没有system这么复杂,比如WindowManager,他的构造函数公有的,也没有重载getSingleton和getSingletonPtr。而这些类似于WindowManager的单件都是在system的构造函数中,system调用自己的一个私有函数createSingletons来new出WindowManager等单件。然后这样就保持了无错。。。甚至是少警告。。。意思就是所有的单件创造都是CEGUI_Base.dll中进行的。。。

问题马马虎虎解决了,但是why?希望高手能帮忙解决下,或者看有无机会以后真正了解。。。

C++动态类创建:工厂模式与自动注册实现运行时对象生成 在软件架构设计中,工厂模式是一种常用的创建型设计模式,它通过定义一个创建对象的接口,将具体类的实例化过程延迟到子类或特定工厂中,从而实现对象创建与使用的解耦。其核心原理是利用多态和抽象基类,让客户端代码仅依赖抽象接口,而不关心具体实现类的细节。这种模式的技术价值在于提高了代码的灵活性和可扩展性,使得系统更容易适应变化,符合开闭原则。在实际工程中,工厂模式广泛应用于插件系统、依赖注入框架、游戏引擎的实体组件系统等场景,特别是当需要根据配置文件、用户输入或运行时条件动态创建不同类别的对象时。本文聚焦于C++语言 阅读详情

相关推荐

DLL_Template

DLL_Template 一个空的DLL,它使用createThread()在自定义函数(MyFunction())中运行用户代码。

C++类 使用template 如何封装为DLL

<br /><br />1.       建立一个win32项目,选择dll创建,如果是已经编写好的类,则可以勾选”空项目”。<br />2.       在“头文件”目录下建立新的头文件,这里以Node类为例:Node.h,将编写好的Node的声明写入Node.h中。<br />3.       注意,一般类的封装此时就应当写Node.cpp从而实现该类中的一些成员方法,但是由于Node类使用了模板(template),因此需要将实现和声明写在同一个文件中,所以这里我们不再建立Node.cpp文件,

tinystone的专栏 3072

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

sv 937

跨dll使用template/STL需要注意的问题

template  是个好东西啊 . 经典的 stl . 强悍的boost. dynamic link也是个好东西啊. 在windows下叫dll, 在unix下叫so (share object) . 它能省下很多重新发布软件带来的麻烦. 但是当template  遭遇到dynamic link 时候, 很多时候却是一场恶梦. 现在来说说一部分我已经碰到过的问题. 问题主要集中在内存分配上. 1>       拿STL来说, 自己写模板的时候,很难免就用到stl. stl的代码都在头

885

UDS 诊断 - CommunicationControl(通信控制)(0x28)服务 诊断

字节参数名称字节值#1CommunicationControl(通信控制)请求SID0x28#2#3communicationType(通信类型)#4nodeIdentificationNumer(节点标识符)(高位字节)controlType 为 0x04 或 0x05 时,使用该参数#5nodeIdentificationNumer(节点标识符)(低位字节)controlType 为 0x04 或 0x05 时,使用该参数。

耳朵东金子千的博客 1820

Quantum Espresso Hands-On实战训练(四)——PDOS计算与轨道分析

本文详细介绍了Quantum Espresso中PDOS计算与轨道分析的实战方法,重点解析了PDOS在材料电子结构研究中的核心价值,包括原子级分辨率、轨道级解析和自旋极化分析。通过具体案例和操作步骤,帮助读者掌握从输入文件准备到结果解读的全流程,并提供了高级分析技巧和疑难问题解决方案。

weixin_29211309的博客 504

boost thread warning C4191和algorithm warning C4242

今天抽出时间来整理一下项目中的警告信息,发现有几个警告很神奇,经过一番查证,终于找到了问题所在。第一个警告:boost/thread/win32/thread_primitives.hpp(315): warning C4191: “类型转换”: 从“boost::detail::win32::farproc_t”到“boost::detail::win32::detail::gettickcoun

卐兜兜飞卍的专栏 1503

金蝶云星空核心数据表解析与高效关联查询指南

本文深入解析金蝶云星空核心数据表结构,提供高效关联查询的实战指南。文章详细介绍了基础资料、业务单据和财务模块的关键表及其关联逻辑,重点阐述了如何利用关联表(_LK表)进行跨单据溯源,并分享了编写高性能SQL的实用技巧与避坑建议,帮助开发者、实施顾问和数据分析师快速掌握数据查询方法,提升工作效率。

weixin_29254673的博客 526

C++游戏开发实战:从零构建高性能游戏引擎核心架构

在实时交互应用领域,性能是核心诉求。C++以其对硬件底层的直接控制能力和零成本抽象理念,成为构建高性能系统的首选语言。通过精细的内存管理、高效的编译优化以及对多线程的深度支持,C++能够实现极致的运行时效率,这对于帧率稳定、资源密集型的应用场景至关重要。其技术价值在于,开发者不仅能实现复杂功能,更能深入理解计算机系统原理,从而精准优化性能瓶颈。在游戏开发、高频交易、仿真模拟等对延迟和吞吐量有严苛要求的场景中,这种掌控力无可替代。本文以游戏引擎开发为切入点,系统阐述了如何运用C++的底层控制力与**实体组件系

weixin_30263277的博客 386

Nerf 训练自有数据

colmap相机位姿转为LLFF格式数据

zfjBIT的专栏 2309

【OpenClaw从入门到精通】第12篇:OpenClaw 2026子代理实战全攻略:用ACP架构搭建多智能体协作网络(附完整代码)

本文聚焦OpenClaw 2026.3.2版本默认启用的ACP(Agent Communication Protocol)子代理机制,从核心概念、底层原理到企业级实操全流程拆解。先解析子代理的定义、ACP协议通信原理及主从代理分工逻辑,再提供环境准备的详细步骤(版本验证、配置调整、技能安装);随后通过三个递进式虚拟案例(客服分流、智能文档处理、企业级招聘全流程),提供可直接运行的完整代码、执行结果及技术要点解析;最后补充子代理管理运维、性能优化与避坑指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2382

Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel

自 Spring Cloud 官方宣布 Spring Cloud Netflix 进入维护状态后,我们开始制作《Spring Cloud Alibaba迁移指南》系列文章,向开发者提供更多的技术选型方案,并降低迁移过程中的技术难度。 第一篇,我们对Hystrix、Resilience4j 和 Sentinel 三个开源项目进行对比,并探讨...

weixin_34144848的博客 165

风险登记册vs问题日志:项目经理必须掌握的区别与应用

在项目管理的世界里,风险登记册和问题日志就像是项目经理的两个得力助手。我们的目的就是要搞清楚这两个助手各自的特点、区别以及如何在项目中好好使用它们。范围涵盖了项目从启动到结束的整个过程,无论是小项目还是大项目,都能从对这两个工具的正确使用中受益。我们先会用有趣的故事引出风险登记册和问题日志的概念,然后像给小学生讲故事一样解释它们是什么。接着分析它们之间的关系和区别,再用代码示例模拟它们在项目中的应用,之后介绍实际的应用场景、推荐相关工具和资源,探讨未来的发展趋势和挑战。

项目管理的博客 875

基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库。通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销。 [cpp] view plaincopyprint? extern "C"   {       typedef int(*Proc_fnTestDll)();  

debugconsole的专栏 970

【软考】数据库系统工程师备考指南(一)

目录一、数据库系统工程师简介二、考试要求三、考试目标四、考试范围(一)信息系统知识(二)数据库系统设计与管理 一、数据库系统工程师简介 数据库系统工程师考试属于全国计算机技术与软件专业技术资格(水平)考试(简称计算机软件水平资格考试)中的一个中级考试。考试不设学历与资历条件,也不论年龄和专业,考生可根据自己的技术水平选择合适的级别合适的资格,但一次考试只能报考一种资格。考试采用笔试形式,考试实行全国统一大纲、统一试题、统一时间、统一标准、统一证书的考试办法。笔试安排在一天之内。 2022 年数据库系统工程

邓邓子的博客 3859

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

动态链接库导出模板类以及一些问题

这篇文章先说如何写一个导出模板类的动态链接库,再说问题。 要编写自己的动态链接库首先需要创建一个dll工程,我用的是win10+vs2015 创建dll工程后vs会自动给你生成几个文件。在Dll2.h和Dll2.cpp中写自己的类定义和类函数实现就好了。但是因为是要导出类所以要有__declspec(dllexport)又因为是模板所以直接上代码看看怎么做吧 .h #pragma

zhengudaoer的博客 6705

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于通过dll导出类模板和函数模板

动态链接库中导出模板函数 C++ 支持函数模板,利用函数模板,可以简化我们的程序代码。我在自己的代码中也经常用到函数模板,但是以前一直以为函数模板是要放到头文件中的,否则调用模板函数时,编译器会找不到函数模板的定义。今天闲暇,又翻了翻 C++ Primer,发现我以前的理解是有问题的。模板函数也可以像普通函数那样,将声明放在头文件中,定义放在.cpp 中。这时又想到另一个问题,DLL 中

Commander 5224

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

模板类和模板函数在dll导出

模板类和模板函数在dll导出

litx的博客 4241

EXE中使用DLL的模板类

模板类是一个编译链接期间才实例化的类。只有用到才实例化。标准没有支持对模板类的导出,从另外一种意义上来说,模板类的实现全部放在头文件中,也就不需要导出了。但是对于一些特别情况。模板类中有静态变量和函数。这个时候DLL中使用的,以及和其他链接这个DLL的模块他们是使用的两份拷贝。 比如, 在DLL中这样使用: Environment* dllPtr = Singleton::GetSin

C++ Template Metaprogramming Fans 1020

动态链接库中导出模板函数

动态链接库中导出模板函数C++ 支持函数模板,利用函数模板,可以简化我们的程序代码。我在自己的代码中也经常用到函数模板,但是以前一直以为函数模板是要放到头文件中的,否则调用模板函数时,编译器会找不到函数模板的定义。今天闲暇,又翻了翻 C++ Primer,发现我以前的理解是有问题的。模板函数也可以像普通函数那样,将声明放在头文件中,定义放在.cpp 中。这时又想到另一个问题,DLL 中是否可以导出模

Ivan 的专栏 6462

Cpp Chapter 8: Adventures in Functions Part5

8.5.2 Overloaded Templates ) As with ordinary overloading, overloaded templates need distinct function signatures: template <typename T> void Swap(T &a, T &b); template <...

dianzili1007的博客 190
上一篇: (转) C++虚函数表解析
下一篇: 跨dll使用template/STL需要注意的问题
wang37921
博客等级 码龄18年 14粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值