Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SWIG Python包装,奇怪的除法运算符重载_Python_C++_Overloading_Swig_Built In - Fatal编程技术网

SWIG Python包装,奇怪的除法运算符重载

SWIG Python包装,奇怪的除法运算符重载,python,c++,overloading,swig,built-in,Python,C++,Overloading,Swig,Built In,当我包装一个特殊的数学运算时,我尝试在CTPS类中包装以下重载运算符: inline const CTPS operator+(const CTPS & M) const {return CTPS(*this)+=M;} inline const CTPS operator+(const double & a) const {return CTPS(*this)+=a;} inline const CTPS operator-(const CTPS & M) const

当我包装一个特殊的数学运算时,我尝试在CTPS类中包装以下重载运算符:

inline const CTPS operator+(const CTPS & M) const {return CTPS(*this)+=M;}
inline const CTPS operator+(const double & a) const {return CTPS(*this)+=a;}
inline const CTPS operator-(const CTPS & M) const {return CTPS(*this)-=M;}
inline const CTPS operator-(const double & a) const {return CTPS(*this)-=a;}
inline const CTPS operator-() const {return CTPS(*this)*=(-1);}
inline const CTPS operator+() const {return CTPS(*this);}

inline const CTPS operator/(const CTPS & M) const {return CTPS(*this)/=M;}
inline const CTPS operator/(const double & a) const {return CTPS(*this)/=a;}
inline const CTPS operator*(const CTPS & M) const {return CTPS(*this)*=M;}
inline const CTPS operator*(const double & a) const {return CTPS(*this)*=a;}
在SWIG中使用以下重命名规则:

%rename (__add__) operator+;
%rename (__sub__) operator-;
%rename (__div__) operator/;
%rename (__mul__) operator*;

%rename (__neg__) operator-();
%rename (__pos__) operator+();
我尝试了使用/不使用SWIG的内置选项。在python中,divide操作符不在内置模式下工作,但在没有此选项的情况下工作。谁能解释一下我做错了什么


非常感谢。

您可能不使用重命名函数,而只使用新版本的swig,它可以支持相应的Python版本。我遇到了同样的问题,C++中的操作符/超载是用SWIG2.0包的,但是Python 3.7在C++中没有识别操作符/类。通过替换能够支持python3.7的swig版本,我的问题终于得到了解决