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

时间:2014-06-07 16:00:06

标签: c++ class declaration

通过Ogre3D源代码,我看到许多类声明如下:

class _OgreExport RenderTarget : public RenderSysAlloc

有人可以帮我理解" _OgreExport"在那儿干什么?

1 个答案:

答案 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符号。

  •   

关于WINDOWS的内容?

macro is expanded__declspec(...)的窗口上,由于与 gcc 中的可见性所描述的类似原因而应用。