Change return value type of Python swigged C function
我有一个C++函数
1 | Version getVersion(){ return Version("1.2.3.5");} |
其中version是一个类,包含"版本信息",例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Version { public: Version(const string& version = gEmptyString); bool parse(const string& input); int getMajor() const; int getMinor() const; int getPatch() const; int getBuild() const; string asString(const string& format = gEmptyString) const; private: int mMajor; int mMinor; int mPatch; int mBuild; }; |
使用swig包装此代码时,Python用户在调用getVersion()函数时会返回一个版本对象。
我想在从Python调用时更改getVersion()函数的行为。我不返回版本对象,而是返回一个表示版本值的字符串。
我尝试了以下方法:
1 2 3 4 5 6 7 8 9 | %rename(getVersionHidden) getVersion; %inline %{ std::string getVersion() { Version v = getVersionHidden(); return v.asString(); } %} |
但这并不能编译:
1 2 3 4 5 6 7 8 | Error ... Call to undefined function 'getVersionHidden' in function getVersion() Error E2285 P:\builds\dsl\wrappers\python\dslPYTHON_wrap.cxx 4434: Could not find a match for 'Version::Version(const Version&)' in function getVersion() Error E2015 P:\builds\dsl\wrappers\python\dslPYTHON_wrap.cxx 16893: Ambiguity between 'dsl::getVersion() at P:/libs/dsl/Common\dslCommon.h:8' and 'getVersion() at P:\builds\dsl\wrappers\python\dslPYTHON_wrap.cxx:4432' in function _wrap_getVersionHidden(_object *,_object *) |
也许排版图的使用是一种方法。我是新来的,所以不确定……
%ReNEAM只为目标语言重命名函数——即,EDCOX1 OR 0将创建一个Python函数(GeVestOnLoad),它转发了C/C++中定义的GETVIEWORN()。
相反,您应该创建一个新的函数,然后将其重命名,以覆盖否则将自动生成的getversion:
1 2 3 4 5 6 7 8 9 | %rename("getVersion") _getVersion_Swig; %inline %{ std::string _getVersion_Swig() { Version v = getVersion(); return v.asString(); } %} |