当前位置: 首页 > news >正文

typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;

查找 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;

用宏和 typedefViewScoreArr 定义了一个别名,其含义可以分解为以下几部分:

  1. MVS_API
    这是一个控制符号导出/导入的宏(通常在 Windows DLL 或跨平台库中用来标记哪些符号需要被导出)。它本身不改变类型,只影响编译时的链接属性。

  2. CLISTDEF0IDX(ViewScore, IIndex)
    这是在 libs/Common/List.h 里定义的宏:

    #define CLISTDEF0IDX(TYPE,IDXTYPE)  SEACAVE::cList< TYPE, const TYPE&, 0, 16, IDXTYPE >
    

    因此

    CLISTDEF0IDX(ViewScore, IIndex)
    

    会展开成

    SEACAVE::cList<ViewScore, const ViewScore&, 0, 16, IIndex>
    

    具体含义是:

    • SEACAVE::cList<…>:OpenMVS 自己实现的一个动态数组模板(类似 std::vector)。

    • ViewScore:元素类型。

    • const ViewScore&:插入/访问时的参数类型(ARG_TYPE)。

    • 0useConstruct=0,表示在内部拷贝时调用对象构造/析构,只做原始内存拷贝(memcpy)。

    • 16:每次增长的最小步长。

    • IIndex:数组下标使用的整数类型,通常是 uint32_tsize_t。 citeturn7view0

  3. typedef … ViewScoreArr;
    最终,ViewScoreArr 就成了一个名字,代表上述那个 cList 特化类型。


小结

typedef MVS_APISEACAVE::cList<ViewScore,        // 存储元素类型const ViewScore&, // 参数传递类型0,                // useConstruct = 0,不走构造/析构16,               // grow = 16,每次至少扩容16个元素IIndex            // 下标类型>ViewScoreArr;
  • ViewScoreArr:一个高效的、按需增长、用 IIndex 下标存取的 ViewScore 动态数组类型。

  • MVS_API:用于控制符号导出,确保在编译成库时这个类型能被外部可见。

这样在代码里就可以直接写:

ViewScoreArr neighbors;
neighbors.push_back(someViewScore);

而不必每次写出冗长的模板参数。

http://www.xdnf.cn/news/66817.html

相关文章:

  • 《解锁增强型上下文学习,打造你的专属智能助手》
  • 每天学一个 Linux 命令(29):tail
  • gnome中删除application中失效的图标
  • 齐次坐标系下的变换矩阵
  • 【图论 DFS BFS】P10725 [GESP202406 八级] 最远点对|普及+
  • LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南
  • LeetCode算法题(Go语言实现)_54
  • ubuntu--汉字、中文输入
  • iso文件在麒麟V10系统上安装达梦数据库
  • 基础服务系列-Jupyter Notebook 支持JavaScript
  • 【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计
  • 前端笔记-Vue3(上)
  • Spark-SQL 四(实验)
  • 显卡及相关大模型部署需求概述
  • 靠华为脱胎换骨,但赛力斯仍需要Plan B
  • 【Linux网络编程十】网络原理之IP协议【网络层】
  • 悬空引用和之道、之禅-《分析模式》漫谈57
  • SystemWeaver详解:从入门到精通的深度实战指南
  • css3新特性第五章(web字体)
  • 极狐GitLab Git LFS 速率限制如何设置?
  • mysql的binlog,redolog,undolog的区别
  • 安卓垂直进度条
  • 学习深度学习是否要先学习机器学习?工程师的路径选择策略
  • 部署Kimi-VL-A3B-Instruct视频推理
  • AgentGPT开源程序可以在浏览器中组装、配置和部署自主人工智能代理
  • FramePack:让视频生成更高效、更实用
  • 从0到1学习X-File-Storage:一站式文件存储解决方案
  • spark基础介绍
  • C++中函数的实现写在头文件内
  • Linux系统的介绍及操作系统的基本概念