创建std::vector泛型类型映射,如何访问模板参数及其描述符?
访问SWIG通用vector模板typemap中的模板参数类型及描述符
当然可以,SWIG提供了专门的宏来提取模板参数,完全能满足你的需求:
核心方法:使用$template_arg(N)宏
在匹配通用模板类型(如std::vector *)的typemap中,$template_arg(N)可以直接提取第N个模板参数的类型。对于std::vector<T>来说,$template_arg(1)就对应T。
如果要获取模板参数的类型描述符,直接把$template_arg(1)传入$descriptor()即可,也就是$descriptor($template_arg(1))。
示例代码
修改你提供的typemap,加入模板参数访问的逻辑:
%typemap(in) std::vector * ($*ltype obj) { // 获取模板参数类型(比如T=int时,这里会被替换为"int") const char* elem_type_str = "$template_arg(1)"; // 获取模板参数的类型描述符 const char* elem_descriptor = "$descriptor($template_arg(1))"; // 堆分配示例 $1 = new $ltype; // 栈分配示例(注意:栈分配的obj生命周期需自行管理,避免悬空指针) // $1 = &obj; }
扩展说明
- 对于多模板参数的容器(如
std::map<K, V>),可以用$template_arg(1)获取K,$template_arg(2)获取V,以此类推。 - 这个宏仅在匹配未指定具体模板参数的typemap中有效,SWIG在实例化模板时会自动将宏替换为实际的类型字符串。
内容的提问来源于stack exchange,提问作者Criminal_Affair_At_SO
相关产品推荐
相关产品推荐

