typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

打印 上一主题 下一主题

主题 1633|帖子 1633|积分 4899

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
查找 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 秒
下面这行代码:
  1. typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex)
  2. ViewScoreArr;
复制代码
用宏和 typedef 为 ViewScoreArr 定义了一个别名,其含义可以分解为以下几部分:

  • MVS_API
    这是一个控制符号导出/导入的宏(通常在 Windows DLL 或跨平台库中用来标志哪些符号必要被导出)。它自己不改变范例,只影响编译时的链接属性。
  • CLISTDEF0IDX(ViewScore, IIndex)

    这是在 libs/Common/List.h 里定义的宏:
    1. #define CLISTDEF0IDX(TYPE,IDXTYPE)  SEACAVE::cList< TYPE, const TYPE&, 0, 16, IDXTYPE >
    复制代码
    因此
    1. CLISTDEF0IDX(ViewScore, IIndex)
    复制代码
    会展开成
    1. SEACAVE::cList<ViewScore, const ViewScore&, 0, 16, IIndex>
    复制代码
    详细含义是:

    • SEACAVE::cList<…>:OpenMVS 自己实现的一个动态数组模板(类似 std::vector)。
    • ViewScore:元素范例。
    • const ViewScore&:插入/访问时的参数范例(ARG_TYPE)。
    • 0:useConstruct=0,表现在内部拷贝时调用对象构造/析构,只做原始内存拷贝(memcpy)。
    • 16:每次增长的最小步长。
    • IIndex:数组下标使用的整数范例,通常是 uint32_t 或 size_t。 citeturn7view0

  • typedef … ViewScoreArr;
    最终,ViewScoreArr 就成了一个名字,代表上述谁人 cList 特化范例。

小结

  1. typedef MVS_API
  2.        SEACAVE::cList<
  3.            ViewScore,        // 存储元素类型
  4.            const ViewScore&, // 参数传递类型
  5.            0,                // useConstruct = 0,不走构造/析构
  6.            16,               // grow = 16,每次至少扩容16个元素
  7.            IIndex            // 下标类型
  8.        >
  9.        ViewScoreArr;
复制代码


  • ViewScoreArr:一个高效的、按需增长、用 IIndex 下标存取的 ViewScore 动态数组范例。
  • MVS_API:用于控制符号导出,确保在编译成库时这个范例能被外部可见。
如许在代码里就可以直接写:
  1. ViewScoreArr neighbors;
  2. neighbors.push_back(someViewScore);
复制代码
而不必每次写出冗长的模板参数。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表