我们需要从 C++ 实现回调。此回调作为 std::function 传递给方法。 我在 StackOverflow 中找到了 @Flexo (https://stackoverflow.com/users/168175/flexo) 的答案,它提供了一个 std_function.i 来解决这个问题:
https://stackoverflow.com/a/32668302/22752295
我的 .i 文件包含以下行:
%include "std_function.i" %std_function(OnStart, void, int64_t);
生成代码时一切似乎都很好,但是,当我尝试从 Android Studio 编译它时,出现以下错误:
error: no viable conversion from 'SwigValueWrapper<std::function<void (long long)>>' to 'base::Util::OnStart' (aka 'function<void (long)>').
如果我看一下生成的代码,似乎 SWIG 正在生成一个 SwigValueWrapper。
_SwigValueWrapper< std::function< void (long long) > > arg2 ;_
一切似乎都可以编译,包括将实际函数设置为此包装器:
arg2 = *argp2;
然而,这一行是失败的:
(arg1)->set_callback(arg2);
似乎无法从 SwigValueWrapper
我尝试了 %feature("novaluewrapper") 但我无法让它在这个例子中工作。
有没有办法禁用 SwigValueWrapper 或防止此错误发生?
编辑:
我解决了这个问题,如果有人有这个问题可以补充:
%feature("novaluewrapper") function<Ret(__VA_ARGS__)>;
在上面
struct function<Ret(__VA_ARGS__)> {
我解决了这个问题,如果有人有这个问题可以补充:
%feature("novaluewrapper") function<Ret(__VA_ARGS__)>;
在
struct function<Ret(__VA_ARGS__)> { ... }
之上