【问题标题】:Are there any problems when using pure C (not class-wrapped) functions in C++ application?在 C++ 应用程序中使用纯 C(非类包装)函数时是否有任何问题?
【发布时间】:2010-11-07 04:16:28
【问题描述】:

我打算在 C++ 应用程序中使用纯 C MPI 库,我不想通过运行例如添加不必要的膨胀。 Boost MPI 层将所有内容包装在 MPI::<func> 类中。

有什么需要注意的吗?

【问题讨论】:

  • 不可能有任何真正的膨胀。 MPI 包含大量开销(任何跨进程,尤其是跨系统 API),并且将 API 包装在合理的 C++ 习惯用法中不会产生可衡量的差异。 Boost 包装器完全有可能字面上零开销,因为这就是内联的魔力。 ;)

标签: c++ c interop


【解决方案1】:

您应该将所有 C 头文件包含在 extern "C" 块中,以避免 C++ 编译器的名称混淆问题。

extern "C" {
    // include C-headers
}

阅读更多here

【讨论】:

  • 对此投了赞成票,因为我完全忘记了 C++ 常见问题解答。那里有很好的信息。谢谢。
【解决方案2】:

并非如此,因为大多数库都准备好包含在 C++ 编译器中(如果没有,您可以按照上面的 Space Cowboy 建议进行操作)。但是,我会建议您(如果您不介意的话)重新考虑提升 MPI。它不会增加不必要的膨胀,并在面向对象的环境中为您提供更全面的 MPI 接口。它为通过 MPI 传输的类型添加了更多语义,甚至为您提供了更多“函数式”运算符,例如使用函子进行计算操作(例如 reduce)等。它们添加的代码量可以忽略不计,而且大部分时间,没有运行时开销,因为抽象是通过模板元编程实现的。

【讨论】:

  • 我也考虑过模板,但我不太相信这将如何处理 MPI 数据类型。此外,由于我称之为加密错误,模板让我头疼。
  • 我明白了...在 boost.MPI 的情况下,模板是供您使用的,所以使用起来与 vector<int> 没有太大区别...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多