gpt4 book ai didi

包含宏的 C++ 方法声明

转载 作者:行者123 更新时间:2023-11-30 02:04:45 24 4
gpt4 key购买 nike

我正在使用 QuickFAST 库,在检查它时我发现了这个我似乎并没有真正理解的类声明!我的意思是类名前的宏名是什么意思!

class QuickFAST_Export Message : public FieldSet

我也找到了这个声明

friend void QuickFAST_Export intrusive_ptr_add_ref(const Field * ptr);

再一次,我没有使用这个声明!

有关更多信息,请访问 QuickFAST_Export.hpp

#ifdef _MSC_VER
# pragma once
#endif
#ifndef QUICKFAST_EXPORT_H
#define QUICKFAST_EXPORT_H

// Compile time controls for library generation. Define with /D or #define
// To produce or use a static library: #define QUICKFAST_HAS_DLL=0
// Default is to produce/use a DLL
// While building the QUICKFAST_ library: #define QUICKFAST_BUILD_DLL
// Default is to export symbols from a pre-built QUICKFAST DLL
//
// Within QUICKFAST use the QuickFAST_Export macro where a __declspec is needed.

#if defined (_WIN32)

# if !defined (QUICKFAST_HAS_DLL)
# define QUICKFAST_HAS_DLL 1
# endif /* ! QUICKFAST_HAS_DLL */

# if defined (QUICKFAST_HAS_DLL) && (QUICKFAST_HAS_DLL == 1)
# if defined (QUICKFAST_BUILD_DLL)
# define QuickFAST_Export __declspec(dllexport)
# else /* QUICKFAST_BUILD_DLL */
# define QuickFAST_Export __declspec(dllimport)
# endif /* QUICKFAST_BUILD_DLL */
# else /* QUICKFAST_HAS_DLL == 1 */
# define QuickFAST_Export
# endif /* QUICKFAST_HAS_DLL == 1 */

# else /* !_WIN32 */

最佳答案

这意味着该类是导出的还是导入的,具体取决于构建的模块。

如果 QUICKFAST_HAS_DLL 被定义且等于 1,则表示该模块被构建为 DLL。要从外部使用功能,必须导出类和方法。

在模块内部,QUICKFAST_BUILD_DLL 被定义。因此,当您构建模块时,QuickFAST_Export 扩展为 __declspec(dllexport)。您的类定义变为:

class __declspec(dllexport) Message : public FieldSet

当您包含来自不同模块的 header 时,未定义 QUICKFAST_BUILD_DLL,因此宏扩展为 __declspec(dllimport),您的类定义为:

class __declspec(dllimport) Message : public FieldSet

关于包含宏的 C++ 方法声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10210449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com