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

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?希望高手能帮忙解决下,或者看有无机会以后真正了解。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值