无法理解C ++中的类定义

时间:2013-03-29 10:28:37

标签: c++

我是基于磁盘的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在类定义中表示什么的指示。

5 个答案:

答案 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)