SWIG生成的名字太长

问题描述:

我正在用SWIG封装一些C++代码来生成Java代码。我有这样的typedefSWIG生成的名字太长

typedef void (*create_cb_t)(const rib_handle_t rib, 
      const cdap_rib::con_handle_t &con, 
      const std::string& fqn, 
      const std::string& class_, 
      const cdap_rib::filt_info_t &filt, 
      const int invoke_id, 
      const ser_obj_t &obj_req, 
      ser_obj_t &obj_reply, 
      cdap_rib::res_info_t& res); 

稍后在一个成员函数中使用

 void addCreateCallbackSchema(const cdap_rib::vers_info_t& version, 
           const std::string& class_, 
           const std::string& fqn_, 
           create_cb_t cb); 

当痛饮生成的文件名过长的类型,并给出了一个错误使用它

Unable to open file ../../../java/eu/irati/librina/SWIGTYPE_p_f_q_const__long_long_r_q_const__rina__cdap_rib__connection_handler_r_q_const__std__string_r_q_const__std__string_r_q_const__rina__cdap_rib__filtering_info_q_const__int_r_q_const__rina__ser_obj_r_rina__ser_obj_r_rina__cdap_rib__result_info__void.java: File name too long 

我该如何更换(我想重命名)typedef的名称,以避免这个问题?

感谢

对这一问题的解决方案是建立在接口文件中的一个特定的typedef(尊重命名空间):

namespace rina { 
namespace rib{ 
    typedef void (*create_cb_t)(const rib_handle_t rib, 
    const cdap_rib::con_handle_t &con, 
    const std::string& fqn, 
    const std::string& class_, 
    const cdap_rib::filt_info_t &filt, 
    const int invoke_id, 
    const ser_obj_t &obj_req, 
    ser_obj_t &obj_reply, 
    cdap_rib::res_info_t& res); 
}} 

,然后忽略.H

#ifndef SWIG 
typedef void (*create_cb_t)(const rib_handle_t rib, 
      const cdap_rib::con_handle_t &con, 
      const std::string& fqn, 
      const std::string& class_, 
      const cdap_rib::filt_info_t &filt, 
      const int invoke_id, 
      const ser_obj_t &obj_req, 
      ser_obj_t &obj_reply, 
      cdap_rib::res_info_t& res); 
#endif 
typedef的