首页 > 解决方案 > 分层控制的函数指针用法: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++" 用法的信息。

标签: cc++11pointersfunction-pointersextern

解决方案


第二个版本不允许从用 C 编写的程序直接访问。

当然,没有什么能阻止 C 程序调用声明的其他 C++ 函数extern "C",而后者又调用std::fn_ptr.


尽管这一点已在评论中被敲定,但值得注意的是,您不允许在 namespace 中定义自己的名称std。大概您引用的代码来自设计用于独立环境的库实现。使用命名空间std与问题无关,只是分散您的问题的注意力。


推荐阅读