通过外部“C”链接解决重载问题

2023-12-29

在混合 C/C++ 项目中,我们需要从 C 调用 C++ 函数。要调用的函数被重载为三个单独的函数,但我们可以从 C 端忽略这一点,我们只需选择最合适的一个并坚持使用该函数。

有两种方法可以做到这一点:(1) 编写一个带有 extern“C” 函数的小型 C++ 包装器,将调用转发到所选的重载函数,或者 (2) 一种简单的方法来声明我们想要从中调用的一个函数C 作为外部“C”。

问题是,选择第二个变体是否有任何缺点(除了噩梦和恶业之外)?换句话说,给定三个重载函数,其中一个被声明为 exern“C”,我们是否应该预期 C++ 方面会出现麻烦,或者这是根据标准定义好的?


我相信标准中的语言是专门编写的,只允许一个具有“C”链接的函数,以及任意数量具有“C++”链接的其他函数,这些函数重载相同的名称(§[dcl.link]/6):

最多一个具有特定名称的函数可以具有 C 语言链接。具有相同函数名(忽略限定它的命名空间名称)的 C 语言链接函数的两个声明出现在不同的命名空间范围中,引用相同的函数。具有相同名称(忽略限定它的命名空间名称)的 C 语言链接对象的两个声明出现在不同的命名空间范围中,引用同一对象。

该标准显示了以下示例:

complex sqrt(complex); // C + + linkage by default
extern "C" {
    double sqrt(double); // C linkage
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过外部“C”链接解决重载问题 的相关文章

随机推荐

  • 具有单页应用程序刷新访问令牌的 Oauth2 隐式流程

    我正在使用 Thinktecture AuthorizationServer AS 它运行良好 我想编写一个本机 javascript 单页应用程序 它可以直接调用 WebAPI 但是隐式流不提供刷新令牌 如果进行 AJAX 调用 如果令牌
  • 仅在提交后禁用提交按钮

    我有以下 HTML 和 jquery h2 Test disabling submit button for 1 minute h2 br p style text align center p
  • 使用 CachedNetworkImage 时应用程序崩溃

    在列表视图中使用 CachedNetworkImage 时应用程序崩溃 如果有很多图片 那么应用程序就会冻结并崩溃 是否可以异步地一张一张地加载每个图像 我可以有一个代码示例吗 谢谢 因此 如果您遇到与我相同的问题 并且您有大量图片 那么您
  • 无法启动 Laravel,出现“未找到基表或视图”错误

    首先我错误地回滚了2次迁移 然后我跑了php artisan migrate命令 我收到以下错误 Illuminate Database QueryException SQLSTATE 42S02 Base table or view no
  • 从 InnerText 中删除注释行

    我目前正在使用下面的代码来提取 InnerText 但是 发生的情况是我被一堆 html 注释行困住了 lt 如何使用下面的代码删除它们 HtmlWeb hwObject new HtmlWeb HtmlAgilityPack HtmlDo
  • Redmine - Ruby - 寻找自定义字段的值

    我检查了 IRC 的 redmine 但无法获得帮助 我很矛盾 不知道该把这个问题放在 Superuser ServerFault 还是这里 但由于我的问题是面向技术编程的 所以我决定在这里寻求帮助 我们有一个 Mercurial 存储库系
  • 声明类型的 MethodInfo 相等性

    我需要检查两个 MethodInfo 之间的相等性 它们实际上是完全相同的 MethodInfo 除了 ReflectedType 即 DeclaringType 相同 并且方法实际上应该具有相同的主体 有很多方法可以做到这一点 但我正在寻
  • 权限设置为777,文件仍然不可写

    我已将文件权限设置为 777 但无法使用 PHP 写入该文件 我可以在我的 FTP 客户端中清楚地看到该文件具有 0777 权限 当我这样做时 echo true is writable file txt yes no 我得到 不 我也尝试
  • try/catch 块内的 Response.Redirect 异常

    比如说 我有一个 try catch 块 它封装了一大块代码 然后在其中的某个位置我需要这样调用 Response Redirect protected void ButtonGo Click object sender EventArgs
  • java泛型:获取具有泛型参数的类的类

    我很好奇如何进行这项工作 Class
  • R,dplyr:根据条件快速构建互补行列表的函数

    我有一个约 80 000 行 x 26 列的数据集 这些行对应于机器人搭建套件的 SKU 或唯一 ID 这些列对应 26 个不同的机器人部件 一个单元包含了对构建整个机器人的贡献的一部分 行比例的总和可能不会等于 1 0 因为拼搭套装并不总
  • Java (Android) 中的 List 是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 Type 叫什么 https stackoverflow com questions 1286005 what is typetype called List gt 在 java 泛型中意味着什么 h
  • 如何在 MATLAB 中将变量值放入文本字​​符串中?

    我正在尝试编写一个需要两个输入的简单函数 x and y 并将它们传递给其他三个简单的函数 对它们进行加 乘 除操作 然后 主函数应将结果显示为包含以下内容的字符串 x y 以及总数 我认为我对输出参数有些不理解 无论如何 这是我的 可怜的
  • 类存在多个定义

    我正在使用 Kohana 框架 它允许多个类定义 在应用程序和系统子文件夹中 我使用 phpstorm 作为 IDE 它会向我发送消息multiple definitions exist for class 有没有办法告诉 phpStorm
  • 在android中的共享首选项中禁用对话框通知

    我在有铃声的应用程序中有共享偏好 我想禁用通知短信和彩信以及来自应用程序的通知 例如警报通知
  • sql中*是什么意思?

    例如 我知道什么SELECT FROM example table 方法 然而 不知道代码的每一部分的含义 我感到不舒服 SQL 查询的第二部分是您要为所获取的每条记录检索的列的名称 显然 您可以为每个记录检索多个列 并且 仅当您想检索al
  • AngularJS 对许多输入进行数据绑定的方式是什么?

    我正在学习 angularjs 我希望能够让用户输入许多输入 当这些输入被输入list数组元素应该相应改变 我想尝试使用 ngRepeat 指令 但我读到 因为它创建了一个新范围 所以我无法进行数据绑定 div div
  • 如何获取backgroundSession NSURLSessionUploadTask响应

    我已经实现了一个在后台运行的 NSURLSession 因此即使应用程序暂停 它也可以使用系统守护进程继续执行任务 问题是 void URLSession NSURLSession session dataTask NSURLSession
  • 如何以编程方式启用 LAN 唤醒

    有没有办法以编程方式进入 BIOS 并为支持 LAN 唤醒功能的计算机打开该功能 理想情况下 解决方案应该是跨 BIOS 的 但使用单独的解决方案来打击每个主要供应商也是可以的 BIOS 配置是操作系统有意限制的内容 以避免病毒问题 以前有
  • 通过外部“C”链接解决重载问题

    在混合 C C 项目中 我们需要从 C 调用 C 函数 要调用的函数被重载为三个单独的函数 但我们可以从 C 端忽略这一点 我们只需选择最合适的一个并坚持使用该函数 有两种方法可以做到这一点 1 编写一个带有 extern C 函数的小型