gpt4 book ai didi

c++ - 如何在 C 中实现在 C++ 命名空间中声明的函数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:45 27 4
gpt4 key购买 nike

假设我有一个 C++ 头文件 foo.hpp:

namespace foo {
int bar(int);
}

我不能使用 extern "C",因为它只需要可以从命名空间 foo 访问。

是否有一种可移植(或相对可移植)的方式来在 C 文件 foo.c 中声明 foo::bar 以便它可以与任何使用 的人链接>foo::bar 来自 C++?

我知道在具有特定编译器的特定系统上,我可以找出 foo::bar 是如何被破坏的,并在 foo.c 中做类似的事情:

int ZN3foo3barEi(int x) { /* ... */ }

但这既不可移植也不可读。

最佳答案

extern "C"可以嵌套(事实上,这就是像 <cstdio> 这样的 header 通常的工作方式!),因此您可以执行以下操作:

/* C++ code */
namespace foo {
extern "C" {
int bar(int);
}
}

之后,您只需像往常一样用 C 实现它:

/* C code */
int bar(int x) {
return -x; /* or whatever */
}

不幸的是,如果存在命名冲突(例如,如果您同时拥有 foo::bar baz::bar ),您将无法同时拥有它们,除非它们相同功能。

关于c++ - 如何在 C 中实现在 C++ 命名空间中声明的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com