企业网站管理系统安装教程,深圳设计院招聘,移动应用程序开发,怎么做虚拟币网站查找 MVS_API 定义
我们没有在 List.h 文件中找到 MVS_API 的定义。MVS_API 很可能在 MVS 库的其他地方定义。一般来说#xff0c;MVS_API 是控制 OpenMVS 库导入导出的宏#xff0c;通常会出现在 MVS 的头文件中。为了回答这个问题#xff0c;我可以提供 MVS 代码中常见的…查找 MVS_API 定义
我们没有在 List.h 文件中找到 MVS_API 的定义。MVS_API 很可能在 MVS 库的其他地方定义。一般来说MVS_API 是控制 OpenMVS 库导入导出的宏通常会出现在 MVS 的头文件中。为了回答这个问题我可以提供 MVS 代码中常见的定义方式稍后会在代码中搜索 MVS_API。
查找 MVS_API 用法
Segmentfault 文章中提到了一些关于 MVS_API 的用法或许可以引用它。不过为了更准确我认为最好直接在 OpenMVS 的代码中搜索“MVS_API”比如在 MVS.h 文件中查找。这样可以更直接地得到相关信息尤其是从 MVS 代码库的角度出发。
查找 MVS_API
我打算在 MVS 源代码中搜索 MVS_API。通过在整个代码库中搜索这个关键词我们可以定位到它的定义或确切位置。这样有助于明确 MVS_API 的功能和作用。
查找 MVS_API 定义
为了更准确地了解 MVS_API 的定义最好在代码中根源文件查找。它可能在 MVS_API.h 或 MVSCommon.h 中定义。为了避免遗漏我打算在 MVS 文件夹中搜索相关内容这样可以直接获得准确的定义并深入了解它的使用方式。
已思考 51 秒
下面这行代码
typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;用宏和 typedef 为 ViewScoreArr 定义了一个别名其含义可以分解为以下几部分 MVS_API 这是一个控制符号导出/导入的宏通常在 Windows DLL 或跨平台库中用来标记哪些符号需要被导出。它本身不改变类型只影响编译时的链接属性。 CLISTDEF0IDX(ViewScore, IIndex) 这是在 libs/Common/List.h 里定义的宏 #define CLISTDEF0IDX(TYPE,IDXTYPE) SEACAVE::cList TYPE, const TYPE, 0, 16, IDXTYPE 因此 CLISTDEF0IDX(ViewScore, IIndex)会展开成 SEACAVE::cListViewScore, const ViewScore, 0, 16, IIndex具体含义是 SEACAVE::cList…OpenMVS 自己实现的一个动态数组模板类似 std::vector。 ViewScore元素类型。 const ViewScore插入/访问时的参数类型ARG_TYPE。 0useConstruct0表示在内部拷贝时不调用对象构造/析构只做原始内存拷贝memcpy。 16每次增长的最小步长。 IIndex数组下标使用的整数类型通常是 uint32_t 或 size_t。 citeturn7view0 typedef … ViewScoreArr; 最终ViewScoreArr 就成了一个名字代表上述那个 cList 特化类型。 小结
typedef MVS_APISEACAVE::cListViewScore, // 存储元素类型const ViewScore, // 参数传递类型0, // useConstruct 0不走构造/析构16, // grow 16每次至少扩容16个元素IIndex // 下标类型ViewScoreArr;ViewScoreArr一个高效的、按需增长、用 IIndex 下标存取的 ViewScore 动态数组类型。 MVS_API用于控制符号导出确保在编译成库时这个类型能被外部可见。
这样在代码里就可以直接写
ViewScoreArr neighbors;
neighbors.push_back(someViewScore);而不必每次写出冗长的模板参数。