当一个类声明似乎有两个名称时,这意味着什么?
What does it mean when a class declaration appears to have two names?
我试图理解一些c++代码,其中有以下类语法:
class Q_MONKEY_EXPORT BasePlugin : public QObject
{
// some code comes here
};
我无法理解语法class Q_MONKEY_EXPORT BasePlugin
。在我看来,这个类好像有两个名字。这种语法在c++中究竟意味着什么?
Q_MONKEY_EXPORT很可能是一个#define。这样的定义有时是必需的,例如当类在库中并且当头文件从其他地方包含时需要导出。在这种情况下,定义解析为类似__declspec(dllexport)
的东西(确切的语法将取决于您使用的工具)。
这很可能是一个预处理器指令,告诉编译器要导出该符号。
它可能被定义为:
#define Q_MONKEY_EXPORT _declspec(dllexport)
,这将导致您的类被导出到dll
。
完整的声明将在编译前展开为:
class _declspec(dllimport) BasePlugin : public QObject
{
// some code comes here
};
编辑:正如David Heffernan所指出的,像这样的宏通常用于让编译器知道它是否需要导入或导出符号。通常在外部模块定义为dllimport
,在构建模块时定义为dllexport
。我怀疑这里的情况是这样的,因为名称暗示导出,但最好检查文档或实际到定义。
Q_MONKEY_EXPORT
是一个宏(所有大写是宏的惯例),通常在构建DLL时解析为__declspec(dllexport)
,在使用DLL时解析为__declspec(dllimport)
。
相关文章:
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 比较两个节点坐标的最佳方法是什么?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- C++ 参考:这两个语句有什么区别?
- 这两个C++语句连接字符串有什么区别?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 比较两个不同的字符串时,C++比较什么?
- 以下两个代码段有什么区别?
- 两个代码段之间有什么区别?
- 如果将两个相同的指针作为输入传递,memcmp 会做什么?
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 在 c++ 中抽象两个略有不同的函数的最佳方法是什么?
- 对两个案例标签使用相同的值与对单个案例使用多个案例标签有什么区别?
- 这两个类语句之间有什么区别?
- 在没有额外代码的情况下链接两个独立类的最通用方法是什么?