c - 分层控制的函数指针用法:xtern/namespace C++
问题描述
下面是来自较旧和较新版本的软件堆栈的示例用法。函数的使用和访问与下面两段代码的层次结构有何不同:
namespace std
{
typedef void (*function)();
extern "C" function fn_ptr(function) throw();
}
和
extern "C++"
{
namespace std
{
typedef void (*function)();
function fn_ptr(function) throw();
}
}
第一个很简单,但我希望在第二个示例中从基于 C 和 C++ 的文件中访问 fn_ptr。请注意,它是 extern "C++",在 Stackoverflow 或 Google 上没有太多关于 extern "C++" 用法的信息。
解决方案
第二个版本不允许从用 C 编写的程序直接访问。
当然,没有什么能阻止 C 程序调用声明的其他 C++ 函数extern "C"
,而后者又调用std::fn_ptr
.
尽管这一点已在评论中被敲定,但值得注意的是,您不允许在 namespace 中定义自己的名称std
。大概您引用的代码来自设计用于独立环境的库实现。使用命名空间std
与问题无关,只是分散您的问题的注意力。
推荐阅读
- ansible - 找到一个准确的字符串
- javascript - 无法使用 FlotJs 绘制 2 个单独的图表
- ruby-on-rails - 未定义的方法 `ceo_name=' for #
- javascript - 谷歌地图在单选按钮选择上更改 JSON 覆盖的填充颜色
- c# - 选择要从中选择的资产时过滤到特定文件夹
- javascript - 如何在控制器内格式化 $scope.datenow?
- node.js - 如何在本地保存聊天记录并在 Bot 框架 NodeJS v4 中访问?
- php - 逗号分隔列表的子字符串的正则表达式
- laravel - JSON 和多部分 Guzzle 发布请求的正确格式
- azure - Azure DevOps Pipelines 不尊重 RBAC 权限