' _OgreExport '在Ogre3D中声明类的目的是什么?

What is the purpose of `_OgreExport` on class declaration in Ogre3D?

本文关键字:是什么 Ogre3D OgreExport 声明      更新时间:2023-10-16

查看Ogre3D源代码,我看到许多类是这样声明的:

class _OgreExport RenderTarget : public RenderSysAlloc

有人能帮我理解什么"_OgreExport"在那里?

简短总结

_OgreExport被定义为有条件地将可见性状态应用于声明的类,它将在不同的平台上扩展为不同的特定于实现的属性。


*NIX相关平台下工作?

_OgreExport的定义可以在ogreplatform.h中找到,它在第248行(和其他地方)

246 // Enable GCC symbol visibility
247 # if defined( OGRE_GCC_VISIBILITY )
248 #         define _OgreExport __attribute__ ((visibility("default")))
249 #         define _OgrePrivate __attribute__ ((visibility("hidden")))
250 # else
251 #         define _OgreExport
252 #         define _OgrePrivate
253 # endif

如果OGRE_GCC_VISIBILITY已定义,则扩展为__attribute__((visibility("default"))

visibility是一个gcc特定的属性,可以在wiki上的gcc.gnu.org关于可见性的页面上阅读。那几页以一种非常清楚和容易理解的方式总结了它。

简而言之,引用上面的链接页面,它说:

  • 为什么新的c++可见性支持如此有用?

    简单地说,它隐藏了大多数ELF符号,这些符号以前是(不必要的)公开的。


WINDOWS呢?

在windows上,宏被扩展为__declspec(...),它的应用原因与gcc中的可见性相似。

  • msdn.com -使用__declspec(dllimport)和__declspec(dllexport)