我正在尝试理解一些具有以下类语法的C ++代码:
class Q_MONKEY_EXPORT BasePlugin : public QObject
{
// some code comes here
};
我无法理解语法class Q_MONKEY_EXPORT BasePlugin
。对我来说,看起来这个班级有两个名字。这种语法究竟在C ++中意味着什么?
答案 0 :(得分:6)
Q_MONKEY_EXPORT很可能是某个地方的#define。定义有时需要的,例如当类在库中时,需要在从其他地方包含头文件时导出。在这种情况下,定义解析为__declspec(dllexport)
(确切的语法将取决于您使用的工具)。
答案 1 :(得分:6)
这很可能是一个预处理程序指令,告诉编译器要导出符号。
它可能被定义为:
#define Q_MONKEY_EXPORT _declspec(dllexport)
这会导致您的课程导出到dll
。
完整的声明将在编译之前扩展为:
class _declspec(dllimport) BasePlugin : public QObject
{
// some code comes here
};
编辑:
正如David Heffernan指出的那样,这些宏通常用于让编译器知道它是否需要导入或导出符号。通常在构建模块时将外部模块定义为dllimport
,将dllexport
定义为{{1}}。我怀疑是这种情况,因为名称建议导出,但最好检查文档或实际上去定义。
答案 2 :(得分:2)
Q_MONKEY_EXPORT
是一个宏(所有大写都是宏的约定),在构建DLL时通常会解析为__declspec(dllexport)
,并在使用时解析为__declspec(dllimport)
DLL。
通过阅读包含文件,您可以准确了解它是什么。