2011-10-20 31 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)

你可以通過閱讀你的包含文件來找到它到底是什麼。

相關問題