Ogre3D のソース コードをダウンロードしたところ、次のようなクラス宣言が見つかりました。
class _OgreExport TimeIndex
{ ...
「TimeIndex」はクラス名だと思いますが、真ん中の「_OgreExport」は何ですか?CPP リファレンスには、この種のクラス宣言形式は含まれていません。これは何ですか?
Ogre3D のソース コードをダウンロードしたところ、次のようなクラス宣言が見つかりました。
class _OgreExport TimeIndex
{ ...
「TimeIndex」はクラス名だと思いますが、真ん中の「_OgreExport」は何ですか?CPP リファレンスには、この種のクラス宣言形式は含まれていません。これは何ですか?
_OgreExport
は、次のいずれかに展開されるプリプロセッサ ディレクティブです。
__declspec(dllimport)
ファイルがそのモジュールの外に含まれている場合、または
__declspec(dllexport)
それ以外は。Windows では、バイナリ間で使用できるように、エクスポート/インポートするクラス/メソッドを指定する必要があります。
技術的には、James がコメントで指摘したように、マクロ名はアンダースコアで始まるため、不正です。これらの名前は実装用に予約されています。
OgrePlatform.h:138のこのコードを参照してください。
# if defined( OGRE_NONCLIENT_BUILD )
# define _OgreExport __declspec( dllexport )
# else
# if defined( __MINGW32__ )
# define _OgreExport
# else
# define _OgreExport __declspec( dllimport )
# endif
# endif
# define _OgrePrivate
# endif
この種の質問がさらにある場合は、Google コード検索を使用することを強くお勧めします。たとえば、_OgreExport と入力して、他のユーザーがそれをどのように使用しているか、またはどのように定義されているかを確認してください。
__declspec(dllexport)
これは、リンカーによってエクスポートされるクラスをマークする、のようなものに展開されるマクロです。