SWIG C++到Python: 警告(362): operator= 被忽略
我正在把一个C++类导出到Python中,发现编译的时候,SWIG发出了一个警告:
Warning(362): operator= ignored
我不太明白为什么会出现运算符重载的情况,因为在SWIG的文档中说,SWIG可以处理像赋值运算符这样的运算符。
我的类没有什么特别的,声明方式是这样的:
class Foo
{
public:
Foo();
Foo& operator= (const Foo&);
// etc ..
};
那么,SWIG为什么不能生成赋值运算符的包装代码呢?我该怎么解决这个问题呢?
2 个回答
9
请查看你文档链接的最后一行(第31.3.11节):
另外,要注意某些运算符在Python中并不能很好地对应。例如,重载的赋值运算符在Python中没有对应的意思,会被忽略。
9
在Python中,除了基本类型,实际上没有真正的赋值,只有指针的赋值。也就是说,当你把一个变量的值赋给另一个变量时,实际上是把指向那个值的“指针”复制过去了。如果你想要创建一个真正的副本,你需要使用一个特别的复制函数。