SWIG 生成的名称太长

SWIG generated names too long

我正在用 SWIG 包装一些 C++ 代码以生成 java 代码。我有这个 typedef

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

SWIG 生成类型时文件名太长,使用时报错

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中的typedef

#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