2013-03-29 86 views
4

儘管我已經編寫了基於主內存的R樹,但我仍然是基於磁盤的R樹的新手。爲了理解基於磁盤的R-Trees,我使用了庫「libspatialIndex」。同時瞭解圖書館,我穿過下面給出的像一個奇怪的類來定義:無法理解C++中的類定義

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在類定義中代表什麼的指針。

回答

1

這是一個宏,允許相同的包括從庫客戶機和庫實現使用。添加實現動態鏈接所需的屬性。

+0

謝謝你的幫助。您是否使用IDE來了解哪個函數定義在哪裏?我到目前爲止在文本編輯器中查看文件,然後通過grep命令搜索文件的定義。有沒有一種簡單的方法可以快速獲得函數/類定義。請幫助 – user1778824

+0

我使用QtCreator,其中F2跳轉到符號定義。 – CapelliC

+0

你是如何在QTCreator中打開項目libsptialindex的。我是QTcreator的新手..我可以幫你...我們也可以用QTCreator編譯項目libspatialindex – user1778824

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 

這只是一個宏,增加了具體的編譯器屬性的類定義

+0

感謝您的幫助。您是否使用IDE來了解哪個函數定義在哪裏?我到目前爲止在文本編輯器中查看文件,然後通過grep命令搜索文件的定義。有沒有一種簡單的方法可以快速獲得函數/類定義。請幫忙 – user1778824

+0

@ user1778824不,我剛剛搜索了SIDX_DLL纔看到它的定義=) – kassak

0

這是一個宏。它可能定義了dll導入/導出屬性。

去它的定義(F12),你會看到,它被定義爲__declspec(import)__declspec(export)

+0

感謝您的幫助。您是否使用IDE來了解哪個函數定義在哪裏?我到目前爲止在文本編輯器中查看文件,然後通過grep命令搜索文件的定義。有沒有一種簡單的方法可以快速獲得函數/類定義。請幫助 – user1778824

+0

@ user1778824類名後的宏用於__declspec ...您可以使用Visual Studio作爲IDE,只需將所有文件加載到項目中即可。 –

+0

有沒有辦法在NetBeans – user1778824

1

SIDX_DLL是一個宏。它用於在DLL中導出IStorageManager符號。

這種宏通常被定義是這樣的:

#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環境。

+0

爲什麼需要導出一個在DLL中的類定義 – user1778824

+0

這就是MSVC的工作方式。如果您不導出並嘗試在符號自己的dll外的某個地方使用它,則會出現鏈接錯誤。 – shakurov

+0

MSVC代表微軟視覺C++ – user1778824