我正在阅读Cgicc library。
行号00103表示cgicc类的类定义。
类CGICC_API Cgicc {
我能理解'class'关键字用于说它是一个类。 “ Cgicc”是一个类名。但是什么是“ CGICC_API”。
当我学习c ++课程时,我发现类定义的语法是
class Class_Name
但是它有三个论点。该代码中的“ CGICC_API”是什么?它指的是什么?
以及请解释以下几行。
00054 #ifdef WIN32
00055 template class CGICC_API std::vector<FormEntry>;
00056 template class CGICC_API std::vector<FormFile>;
00057 #endif
最佳答案
这是一个预处理器定义,用于将类标记为从DLL库导入或导出。这是库源代码中的实际宏定义:
#ifdef WIN32
// export library symbols
#ifdef CGICC_EXPORTS
# define CGICC_API __declspec(dllexport)
# else
# define CGICC_API __declspec(dllimport)
# endif
#else
# define CGICC_API
#endif /* WIN32 */
首先要注意的是,它是仅Windows的定义,在其他平台上,它只是一个空的预处理程序标识符。
另外一个是,宏定义由CGICC_EXPORT选项控制,因此,在构建该库时,请将CGICC_EXPORT定义添加到编译器标志中,并且所有标有CGICC_API的符号现在都为__declspec(dllexport)。另一方面,当您包含公共库头时,没有CGICC_EXPORT选项,并且所有标有CGICC_API的符号现在都是__declspec(dllimport)。
因此,基本上,此技巧使构建Windows DLL(导出过程)时使用相同的标头,然后再作为公共库标头(导入过程)使用。