【发布时间】:2020-08-29 17:26:17
【问题描述】:
不确定这是否可能。 我需要将一个函数从 C 传递到 C++。 它不能是函数指针。
我需要调用的 C++ 函数:
template<class Lam>
void parfor(int N, Lam lam) {
lam(i);
}
我想给parfor的C函数(这里ptr可以是全局指针):
void calc(int num) {
ptr[0] = num;
}
C Main 看起来像这样:
include <ParFor.hpp>
parfor(calc, 1);
我可以将函数定义放在标题中。在 C++ 方面,我有一个函数(来自外部库),它采用 C++ lambda 或 C++ 仿函数。它被模板化为 lambda
我目前的想法是将我的 C 函数放在一个文件中,为它们编译 LLVM IR,并以某种方式强制将 clang 生成的 IR 内联到我的 C++ 函数中。 C 调用 mycppfunc(mycfunc)。 mycppfunc 具有用于 mycfunc 的 LLVM IR,并且能够生成正确的代码。 我尝试了这个,但是由于似乎不兼容的 IR,编译器在链接阶段崩溃了。
【问题讨论】:
-
我们看到的代码比(模糊)描述的代码更容易推理。
-
如何在没有函数指针的情况下表示 C 函数?
-
@StoryTeller-UnslanderMonica 添加了一些代码 sn-ps 以澄清
-
“我试图杀死一只苍蝇,所以我引爆了一枚战术核武器,现在这座城市和其中的一切都具有放射性,请派人帮忙”。这就是对您尝试的描述听起来或多或少的方式。让我们试着收拾残局。您可以从 C++ 调用 C 代码。您不能直接从 C 调用 C++ 特定代码(模板、lambda、成员函数)。您可以通过使用
extern "C"链接将模板或任何内容包装在普通 C++ 函数中来间接从 C 调用此类 C++ 代码。你试过吗?
标签: c language-interoperability sycl