У меня есть функция C ++
Version getVersion(){ return Version("1.2.3.5");}
где Version - это класс, содержащий "информацию о версии", например,
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 получает объект Version при вызове функции getVersion ().
Я бы хотел изменить поведение функции getVersion () при вызове из Python. Вместо того, чтобы возвращать объект Version, я бы хотел вернуть строку, представляющую значение Version.
Я попробовал следующее:
%rename(getVersionHidden) getVersion;
%inline %{
std::string getVersion()
{
Version v = getVersionHidden();
return v.asString();
}
%}
но это не компилируется:
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 *)
Возможно, стоит использовать карту типов. Я новичок в Swig, так что не уверен ..?