2016-03-08 94 views
3

我正在用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的名稱,以避免這個問題?

感謝

回答

0

對這一問題的解決方案是建立在接口文件中的一個特定的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的