4

私はディスクベースの R ツリーの初心者ですが、メイン メモリ ベースの R ツリーをコーディングしました。ディスク ベースの R ツリーを理解するために、ライブラリ "libspatialIndex" を使用しています。ライブラリを理解している間、私は以下に示すようなクラスの奇妙な定義に出くわしています:

class SIDX_DLL IStorageManager
{
public:
    virtual void loadByteArray(const id_type id, uint32_t& len, byte** data) = 0;
    virtual void storeByteArray(id_type& id, const uint32_t len, const byte* const data) = 0;
    virtual void deleteByteArray(const id_type id) = 0;
    virtual ~IStorageManager() {}
}; // IStorageManager

クラス定義で SIDX_DLL を使用するこのクラスの新しい定義を理解できません。クラス定義で SIDX_DLL が何を表しているかについて、誰かが私にポインタを教えてください。

4

5 に答える 5

1

SIDX_DLLマクロです。IStorageManagerシンボルを dll にエクスポートするためのものです。

この種のマクロは通常、次のように定義されます。

 #if defined(_MSC_VER) && defined(SIDX_EXPORTS)
 #  define SIDX_DLL __declspec(dllexport)
 #elif defined(_MSC_VER)
 #  define SIDX_DLL __declspec(dllimport)
 #else
 #  define SIDX_DLL
 #endif

SIDX_EXPORTSは、SIDX dll のコンパイル時にのみ定義される MSVC 定義のシンボルです。その場合、 にSIDX_DLL展開され__declspec(dllexport)ます。それ以外の場合はすべて__declspec(dllimport)、シンボルが使用される場所にインポートされます。

SIDX_DLL(リストの最後#else) は、Windows 以外の環境用です。

于 2013-03-29T10:34:02.040 に答える
1

これは、ライブラリ クライアントとライブラリ実装から同じインクルードを使用できるようにするマクロです。動的リンクを実装するために必要な属性を追加します。

于 2013-03-29T10:32:54.673 に答える
1

Tools.h

47 #if defined _WIN32 || defined _WIN64 || defined WIN32 || defined WIN64
48  #ifdef SPATIALINDEX_CREATE_DLL
49  #define SIDX_DLL __declspec(dllexport)
50  #else
51  #define SIDX_DLL __declspec(dllimport)
52  #endif
53 #else
54  #define SIDX_DLL
55 #endif

これは単なるマクロであり、コンパイラ固有の属性をクラス定義に追加します

于 2013-03-29T10:30:52.170 に答える
0

マクロです。おそらく、dll のインポート/エクスポート プロパティを定義します。

__declspec(import)その定義 (F12) に移動すると、次のように定義されていることがわかります。__declspec(export)

于 2013-03-29T10:32:29.777 に答える
0

定義です。これについてはhttp://libspatialindex.github.com/doxygen/Tools_8h_source.html 54 行で読むことができます。

于 2013-03-29T10:30:37.790 に答える