加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 命名空间的问题

发布时间:2020-12-15 02:09:59 所属栏目:Java 来源:网络整理
导读:我有以下问题.我试图将代码从C包装到 java. COMMON.H namespace rinad {namespace mad_manager {templateclass Tclass Encoder{public: virtual ~Encoder(){} virtual void encode(const T obj,ser_obj_t serobj) = 0; virtual void decode(const ser_obj_t
我有以下问题.我试图将代码从C包装到 java.

COMMON.H

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;
}}

encoders.h

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"; };
};
}}

librinad.i

%{
#include "common.h"
#include "encoders.h"
%}
%include "common.h"

%template(TempIPCPConfigEncoder) rinad::mad_manager::Encoder<rinad::mad_manager::ipcp_config_t>;

%include "encoders.h"

但是,生成的.cc文件(swig< options> -o librinad_java.cc)不会考虑导致错误的某些命名空间.

librinad_java.cc:836:32:错误:未在此范围内声明’ipcp_config_t’
???rinad :: mad_manager ::编码器和LT; ipcp_config_t> * arg1 =(rinad :: mad_manager :: Encoder< ipcp_config_t> *)0;

我试图指定每个命名空间(即使它没有必要),但它既不起作用.如果我在librinad_java.cc中手动添加命名空间rinad :: mad_manager :: ipcp_config_t它可以工作,那么问题是SWIG不会导出这个命名空间.我无法弄清楚这里的问题是什么.

边题.我不得不将encode.h中显示的代码与encoders.h中显示的代码分开,以便能够在实例化(encoders.h)之前在.i中指定模板,但是在定义了ipcp_config_t之后(common.h) ).这是唯一的方法吗?

解决方法

好的,这是一个答案.不要做

typedef struct ipcp_config{
....
}ipcp_config_t;

typedef struct{
....
}ipcp_config_t;

这对我有用,因为我不需要转发声明.如果需要声明,我仍然不知道该怎么做(例如在递归结构中)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读