如何创建排除this指针的通用Generic typemap(无参数名)
实现排除
this指针的通用Generic Typemap 完全可以实现这种不指定参数名、仅作用于某类型所有显式命名参数(排除this指针)的通用typemap,核心就是利用SWIG的nothis=1属性。
原理说明
SWIG处理成员函数时会自动生成隐式的this指针参数,而nothis=1属性会告诉SWIG:当前定义的typemap仅匹配显式声明的命名参数,跳过那个隐式的this指针。
示例验证
你给出的代码本身就是正确的实现方式:
%typemap(in, nothis=1) someClassObject* { // 这里的逻辑只会作用于所有类型为someClassObject*的显式命名参数 // 不会影响成员函数的隐式this指针 }
扩展用法
如果需要匹配更宽泛的类型,可使用SWIG的类型通配符:
// 匹配所有void指针类型的显式参数,排除this %typemap(in, nothis=1) void* { // 自定义处理逻辑 } // 匹配所有类指针类型的显式参数,排除this %typemap(in, nothis=1) SWIGTYPE* { // 自定义处理逻辑 }
关键注意点
nothis=1是实现排除this的核心,无此属性时,typemap会同时作用于显式参数和隐式this指针- 这种写法无需指定具体参数名,属于通用typemap,会匹配所有符合类型要求的显式参数
内容的提问来源于stack exchange,提问作者Criminal_Affair_At_SO
相关产品推荐
相关产品推荐

