我是基于磁盘的R-tree的新手,尽管我编写了基于主内存的R-Trees。为了理解基于磁盘的R-Trees,我正在使用库“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在类定义中表示什么的指示。
答案 0 :(得分: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
这只是一个宏,它将特定于编译器的属性添加到类定义
答案 1 :(得分:1)
这是一个允许从库客户端和库实现中使用相同的宏。添加实现动态链接所需的属性。
答案 2 :(得分: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
是MSVC定义的符号,仅在编译SIDX dll时定义。在这种情况下,SIDX_DLL
会扩展为__declspec(dllexport)
。在所有其他情况下,它会扩展为__declspec(dllimport)
- 将符号导入到使用它的任何位置。
空SIDX_DLL
(列表中的最后#else
)适用于非Windows环境。
答案 3 :(得分:0)
这是定义。您可以在http://libspatialindex.github.com/doxygen/Tools_8h_source.html 54行了解相关信息。
答案 4 :(得分:0)
这是一个宏。它可能定义了dll导入/导出属性。
转到其定义(F12),您会看到它定义为__declspec(import)
和__declspec(export)