Java 名称空间的问题
我有以下问题。我试图把代码从C++封装到java。 普通的Java 名称空间的问题,java,c++,swig,Java,C++,Swig,我有以下问题。我试图把代码从C++封装到java。 普通的 namespace rinad { namespace mad_manager { template<class T> class Encoder{ public: virtual ~Encoder(){} virtual void encode(const T &obj, ser_obj_t& serobj) = 0; virtual void decode(const ser_o
namespace rinad {
namespace mad_manager {
template<class T>
class Encoder{
public:
virtual ~Encoder(){}
virtual void encode(const T &obj, ser_obj_t& serobj) = 0;
virtual void decode(const ser_obj_t &serobj,
T& des_obj) = 0;
};
typedef struct ipcp_config{
....
}ipcp_config_t;
}}
名称空间rinad{
名称空间管理器{
模板
类编码器{
公众:
虚拟~Encoder(){}
虚空编码(常数T&obj,序列T&serobj)=0;
虚拟空解码(const ser_obj_t&serobj,
T&des_obj)=0;
};
类型定义结构ipcp_配置{
....
}ipcp配置;
}}
编码器
namespace rinad {
namespace mad_manager {
class IPCPConfigEncoder: public Encoder<ipcp_config_t> {
public:
void encode (const ipcp_config_t &obj,
ser_obj_t& ser_obj);
void decode(const ser_obj_t &ser_obj,
ipcp_config_t& obj);
std::string get_type() const{ return "ipcp-config"; };
};
}}
名称空间rinad{
名称空间管理器{
IPCPConfigEncoder类:公共编码器{
公众:
无效编码(常量ipcp配置和对象,
服务对象和服务对象);
无效解码(常数序列号和序列号),
ipcp_配置和obj);
std::string get_type()const{return“ipcp config”;};
};
}}
利伯里纳德,我
%{
#include "common.h"
#include "encoders.h"
%}
%include "common.h"
%template(TempIPCPConfigEncoder) rinad::mad_manager::Encoder<rinad::mad_manager::ipcp_config_t>;
%include "encoders.h"
%{
#包括“common.h”
#包括“encoders.h”
%}
%包括“common.h”
%模板(tempicpconfigencoder)rinad::mad_manager::编码器;
%包括“encoders.h”
生成的.cc文件(<代码> SWIG-O RealInAdjavaC.<代码>)但不考虑导致错误的一些命名空间。
librinad_java.cc:836:32:错误:“ipcp_config_t”未在此作用域中声明 rinad::mad_管理器::编码器librinad\u java.cc
中手动添加名称空间rinad::mad\u manager::ipcp\u config\u t
,它会工作,因此问题是SWIG不会导出此名称空间。我想不出这是什么问题
附带问题。我必须将
common.h
中显示的代码与encoders.h
中显示的代码分开,以便能够在实例化(encoders.h
)之前,但在定义了ipcp\u config\u t
之后(common.h
)在.I
中指定模板。这是唯一的方法吗?好的,下面是一个答案。不做
typedef struct ipcp_config{
....
}ipcp_config_t;
但是
这对我有效,因为我不需要转发声明。如果需要声明(例如在递归结构中),我仍然不知道该怎么做。!我不知道为什么。。。我想这是一个typedef包装问题
typedef struct{
....
}ipcp_config_t;