【发布时间】:2015-09-28 08:57:43
【问题描述】:
在我的 java 代码中,我想调用 std::set 默认构造函数和插入,例如以下 C++ 代码:
struct foo;
foo bar();
std::set<foo> toto;
toto.insert(b);
Swig provides support for various STL containers for java 如std::vector、std::string、std::map... 但是不支持std::set。
所以我发现了这个solution,它涉及一个 C++ 包装器和一个 java 包装器。我还没有尝试过,我不确定它是否会起作用,我觉得它不方便。
我们可以通过提出一个处理基本集合构造函数和插入的最小 swig 接口来做得更好吗?
例如一个接口 std_set.i 喜欢:
%{
#include <set>
#include <pair>
#include <stdexcept>
%}
namespace std {
template<class T> class set {
public:
typedef T value_type;
set();
pair<iterator,bool> insert(const value_type& val); // iterator might be the difficulty here
}
或者为特定的模板实例创建包装器:
%rename(SetFoo) std::set<foo>;
class std::set<foo> {
public:
set();
std::pair<std::set<foo>::iterator,bool> insert(const &foo val); // std::set<foo>::iterator not known here...
};
在这两种情况下,我都被这个迭代器问题困扰,无法提供“简单”的解决方案。
我曾尝试与swig/Lib/std 一起玩,目前也没有成功。
【问题讨论】: