当一个类声明看起来有两个名字时,这意味着什么?

Ama*_*ani 9 c++

我试图理解一些具有以下类语法的C++代码:

class Q_MONKEY_EXPORT BasePlugin : public QObject
{
    // some code comes here
};
Run Code Online (Sandbox Code Playgroud)

我无法理解语法class Q_MONKEY_EXPORT BasePlugin.对我来说,看起来这个班级有两个名字.这种语法究竟在C++中意味着什么?

Dab*_*ler 7

Q_MONKEY_EXPORT很可能是某个地方的#define.定义有时需要的,例如当类在库中时,需要在从其他地方包含头文件时导出.在这种情况下,define会解析为类似的东西 __declspec(dllexport) (确切的语法将取决于您使用的工具).


Luc*_*ore 6

这很可能是一个预处理器指令,告诉编译器要导出符号.

它可能定义为:

#define Q_MONKEY_EXPORT _declspec(dllexport)
Run Code Online (Sandbox Code Playgroud)

这将导致您的类被导出到dll.

在编制之前,完整的声明将扩展到:

class _declspec(dllimport) BasePlugin : public QObject
{
    // some code comes here
};
Run Code Online (Sandbox Code Playgroud)

编辑:

正如David Heffernan指出的那样,这些宏通常用于让编译器知道它是否需要导入或导出符号.通常定义dllimport为外部模块和dllexport构建模块时.我怀疑是这种情况,因为名称建议导出,但最好检查文档或实际去定​​义.