如果我想打印約在C++對象的信息,我將使用outstream運營商<<
:如何使用SWIG在Python中將運算符<<包裝爲__str__?
class Foo
{
public:
friend std::ostream& operator<<(std::ostream& out, const Foo& foo);
private:
double bar = 7;
};
inline std::ostream& operator<<(std::ostream& out, const Foo& foo)
{
return out << foo.bar;
}
然後,我可以做Foo foo; std::cout << foo << std::endl;
。 Python中相同的東西將執行__str__
,然後說print(foo)
。但由於運營商並非真的是Foo
的成員,我不知道如何在SWIG中做到這一點。
我需要在我的界面文件中寫些什麼才能重用我在print()
中使用的outstream操作符的實現?
此外,是否有可能讓SWIG做的一個目的shared_ptr
自動重定向,所以,如果我回到地方std::shared_ptr<Foo>
,我仍然可以稱之爲print(sharedPtrToFoo)
,它會調用所指向的__str__
或operator<<
反對?
這似乎是相關的:http://stackoverflow.com/questions/25199233/str-not-called-when-printing-c-class-wrapped-for-python-with-swig – user2357112