无法理解c++中的类定义
Unable to understand class definition in C++
我是一个基于磁盘的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)
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何定义一个纯抽象基类