2011-10-20 6 views
8

私は、以下のクラスの構文を持っているいくつかのC++のコードを理解しようとしています:クラス宣言に2つの名前があるように見える場合はどういう意味ですか?

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

私は構文class Q_MONKEY_EXPORT BasePluginを理解することはできません。クラスには2つの名前があるように私にはそれが見えます。 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 
}; 

EDIT:

デビッドHeffernanのが指摘したように、これらのようなマクロは、一般的に、コンパイラはそれが必要かどうかを知らせるために使用されている

シンボルをインポートまたはエクスポートします。通常、外部モジュールにはdllimport、モジュールをビルドするにはdllexportと定義されています。その名前は輸出を示唆しているので、ここにはそのような疑いがありますが、文書をチェックしたり、実際に定義に行くのが最善です。

2

Q_MONKEY_EXPORTは、DLLをビルドするときに通常__declspec(dllexport)のように解決され、DLLを使用しているときには__declspec(dllimport)に解決されるマクロです(すべて大文字です)。

あなたのインクルードファイルを読むことによって、それが何であるかを正確に知ることができます。

関連する問題