SWIG:编译时出错。 SwigValueWrapper 没有可行的转换

问题描述 投票:0回答:1

我们需要从 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> 转换为 std::function

我尝试了 %feature("novaluewrapper") 但我无法让它在这个例子中工作。

有没有办法禁用 SwigValueWrapper 或防止此错误发生?

编辑:

我解决了这个问题,如果有人有这个问题可以补充:

%feature("novaluewrapper") function<Ret(__VA_ARGS__)>;

在上面

struct function<Ret(__VA_ARGS__)> {

java c++ swig
1个回答
1
投票

我解决了这个问题,如果有人有这个问题可以补充:

%feature("novaluewrapper") function<Ret(__VA_ARGS__)>;

struct function<Ret(__VA_ARGS__)> { ... }

之上
© www.soinside.com 2019 - 2024. All rights reserved.