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的