这个宏在类定义的开头是什么?

lea*_*vst 3 c++ macros class c-preprocessor

我正在查看库的源代码,并使用以下表单定义了许多类

class THING_API ClassName 
{
...
Run Code Online (Sandbox Code Playgroud)

跳转到宏定义...

#ifndef THING_API
 #define THING_API   /**< This macro is added to all public class declarations. */
#endif
Run Code Online (Sandbox Code Playgroud)

这可能是什么,这是一种常见的技术吗?

Vio*_*ffe 5

它在我看来非常像导出宏,这在Windows上构建共享库(.dll)时是必需的.在使用MSVC进行编译时,您必须__declspec(export)在构建库时以及__declspec(import)构建其客户端时放入该位置.这是通过以下方式实现的:

#if COMPILING_DLL
    #define THING_API __declspec(dllexport)
#else
    #define THING_API __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

然后COMPILING_DLL为库项目定义,并为所有其他项目保留未定义.如果您不在Windows上或编译静态库,则需要将其定义为空白,就像在您的问题中所做的那样.

PS其他Windows编译器使用自己的关键字代替__declspec(dllimport),但原则仍然存在.