2013-03-29 2 views
4

Я новичок на дисковых R-деревьях, хотя у меня есть закодированные R-деревья с основной памятью. Для того, чтобы понять R-деревья на основе диска, я использую библиотеку 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

как вы открыли проект libsptialindex в QTCreator. Я новичок в QTcreator .. также могу у помочь ...также мы можем скомпилировать проект libspatialindex с QTCreator – 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 ... вы можете использовать визуальную студию в качестве IDE, просто загрузите все файлы в проект. –

+0

есть способ сделать так же в netbeans – user1778824

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 является MSVC определенный символ, который только получает определенный при компиляции DLL SIDX. В этом случае SIDX_DLL расширяется до __declspec(dllexport). Во всех остальных случаях он расширяется до __declspec(dllimport), который импортирует символ туда, где он используется.

Пустой SIDX_DLL (последний #else в листинге) предназначен для не-Windows-сред.

+0

Зачем нужно экспортировать определение класса в dll – user1778824

+0

Это как раз то, как работает MSVC. Если вы не экспортируете и не пытаетесь использовать его где-то вне собственной библиотеки dll, вы получите ошибку привязки. – shakurov

+0

Подходит ли MSVC для Microsoft Visual C++ – user1778824

Смежные вопросы