通过Ogre3D源代码,我看到许多类声明如下:
class _OgreExport RenderTarget : public RenderSysAlloc
有人可以帮我理解" _OgreExport"在那儿干什么?
答案 0 :(得分:2)
宏_OgreExport
被定义为有条件地将可见性状态应用于声明的类,它将扩展到不同平台上的不同特定于实现的属性。 / p>
*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特定属性,可以在page regarding Visbility上的 gcc.gnu.org 上的wiki中阅读。那些页面以非常清晰,易于理解的方式总结出来。
简而言之,引用上面的链接页面,它说:
为什么新的C ++可见性支持如此有用?
简而言之,它隐藏了之前(并且不必要地)公开的大多数ELF符号。
在macro is expanded到__declspec(...)
的窗口上,由于与 gcc 中的可见性所描述的类似原因而应用。