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

Unable to understand class definition in C++

本文关键字:定义 c++      更新时间:2023-10-16

我是一个基于磁盘的r树的新手,尽管我已经编码了基于r树的主内存。为了理解基于磁盘的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代表在类定义。

这是一个宏,允许在库客户端和库实现中使用相同的include。添加实现动态链接所需的属性。

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

这只是一个宏,它将编译器特定的属性添加到类定义

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定义的符号,只有在编译SIDX dll时才会定义。在这种情况下,SIDX_DLL膨胀成__declspec(dllexport)。在所有其他情况下,它展开为__declspec(dllimport)——将该符号导入到使用它的任何地方。

SIDX_DLL(清单中最后一个#else)用于非windows环境。

这是定义。

这是一个宏。它可能定义了dll的导入/导出属性。

转到它的定义(F12),你会看到它被定义为__declspec(import)__declspec(export)