【问题标题】:How to use std::function in JNI如何在 JNI 中使用 std::function
【发布时间】:2016-03-29 16:44:44
【问题描述】:

我有一个 C++ 类,它的类成员如下:

class FilterPipeline{
    std::vector<std::function<bool(Object&, Object&)> > filters;

public:

    void addFilter(std::function<bool(Object&, Object&)> filter){    
        this->filters.push_back(filter);
    }

    bool eval(Object &o){
        bool state = true;

        for(int i=0; i<this->filters.size(); i++)
        {
            if(!this->filters[i]((*this), o))
            {
                state = false;
                break;
            }
        }
        return state;
    }
}

在 Java 中,我希望能够将 lambda 表达式传递给 addFilter 方法并在最后调用 eval 方法进行评估。

@FunctionalInterface
public interface Filter{
    public boolean test(Object o1, Object o2);
} 

FilterPipeline p = new FilterPipline();
p.addFilter((o1, o2) -> {
     boolean result;
     // do something here
     return result;
});

if(p.eval(new Object()){
    // do something
}

在使用 JNI 时我应该如何实现这一点?我正在考虑使用功能接口,但我对 JNI 开发真的很陌生,所以我不太确定我应该在这里做什么。

【问题讨论】:

  • 您需要提供更多详细信息。你打算如何在你的 Java 代码中使用这个类?
  • @Michael 刚刚更新了问题。
  • 问:你不只使用一个漂亮、简单、C 风格的回调函数吗???
  • @paulsm4 因为我希望能够使用 lambda 表达式
  • 信息还不够。你的 Java FilterPipeline 类是什么样的?它如何与原生代码交互?

标签: java android c++ lambda java-native-interface


【解决方案1】:

有你

1) 链接头文件(c++标准库)

2) #包括

3) 使用命名空间标准;

等等?

如果您是 JNI 新手,请先阅读一些教程...

【讨论】:

  • 这应该是一个评论,因为这不能回答问题。
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多