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