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)
这可能是什么,这是一种常见的技术吗?
它在我看来非常像导出宏,这在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),但原则仍然存在.
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |