2011-10-20 34 views
8

我想了解一些C++代码,具有以下类语法:当类声明看起来有两个名字时,这意味着什么?

class Q_MONKEY_EXPORT BasePlugin : public QObject 
{ 
    // some code comes here 
}; 

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

+0

重复(某种程度上)http://stackoverflow.com/questions/3148571/strange-class-declaration? –

+0

@LokiAstari为什么很难指定哪些符号要导出,哪些不能导出? –

+0

@Omri Barel谢谢你指点我的问题,我的搜索没有成功,这就是为什么我问。 – Amani

回答

6

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

6

这很可能是一个预处理器指令,告诉编译器该符号将被导出。

它可能定义为:

#define Q_MONKEY_EXPORT _declspec(dllexport) 

这将导致你的类出口到dll

完全声明将扩大,编译前,于:

class _declspec(dllimport) BasePlugin : public QObject 
{ 
    // some code comes here 
}; 

编辑:

正如大卫·赫弗南指出,像这样的宏通常用来让编译器知道它是否需要导入或导出符号。在构建模块时,通常将外部模块定义为dllimport,将外部模块定义为dllexport。我怀疑是这种情况,因为名称暗示了导出,但最好检查文档或实际转到定义。

2

Q_MONKEY_EXPORT是一个宏(全部大写是宏观约定)通常解析为像__declspec(dllexport)当你正在构建的DLL,当你正在使用的DLL解析为__declspec(dllimport)

你可以通过阅读你的包含文件来找到它到底是什么。

相关问题