我尝试将一个SmartPointer-Template-Type包含在一个inWayper中,用于in typemap。我找不到解决方案。所以我检查了swig源代码并意识到SwigType_alttype
中的typsys.c
正在为所有模板设置use_wrapper
为true。由于use_wrapper = !n || !GetFlag(n, "feature:novaluewrapper");
,true
总是!n
。这是故意还是错误?
n = Swig_symbol_clookup(td, 0);
if (n) {
if (GetFlag(n, "feature:valuewrapper")) {
use_wrapper = 1;
} else {
if (Checkattr(n, "nodeType", "class")
&& (!Getattr(n, "allocate:default_constructor")
|| (Getattr(n, "allocate:noassign")))) {
use_wrapper = !GetFlag(n, "feature:novaluewrapper") || GetFlag(n, "feature:nodefault");
}
}
} else {
if (SwigType_issimple(td) && SwigType_istemplate(td)) {
use_wrapper = !n || !GetFlag(n, "feature:novaluewrapper");
}
}
我不能回答为什么他们这样做,但我找到了https://web.archive.org/web/20171227205037/http://swig-user.narkive.com/f3gshV1S/swigvaluewrapper-being-used-for-unknown-templates的工作。
从上一篇文章:
我找到了一个简洁的解决方案,使用%template指令解决这个问题,没有名字,
%template()std :: auto_ptr;
我自己使用它,虽然很烦人,你必须为每种类型声明它不是太糟糕。