使用Classname之前的宏的C ++类

时间:2015-10-30 12:25:30

标签: c++ visual-c++

我对C ++中的类声明有以下疑问。为什么需要这种声明?

class MACRONAME cStream : public comm::IStream

为什么类名称中包含宏。这个宣言有什么好处吗?

1 个答案:

答案 0 :(得分:1)

通常代表__declspec(dllexport)和__declspec(dllimport)(参见https://msdn.microsoft.com/en-us/library/dabb5z75.aspx)。这使得在构建dll时导出类定义,并在构建引用dll的内容时导入。

例如,在dll项目的一些常见标题中有这样的东西:

#if defined( _BUILDING_MY_PROJECT_ )
  #define MY_PROJECT__TYPE __declspec(dllexport)
#else
  #define MY_PROJECT__TYPE __declspec(dllimport)
#endif  

一个项目定义了一个_BUILDING_MY_PROJECT_宏,因此使用__declspec(dllexport)构建了使用MY_PROJECT__TYPE进行调度的类,而在其他情况下,当标题包含在另一个项目类定义的源代码中时,将调用__declspec(dllimport)。

这使得更容易保持代码更灵活,例如在非Windows平台上,这样的宏可以被定义为空。