如果我想在C ++中打印有关对象的信息,我将使用outstream运算符<<
:
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<<
?
答案 0 :(得分:3)
这样的事情应该有用,假设你没有使用`-builtin':
%extend Foo {
std::string __str__() const {
std::ostringstream out;
out << *$self;
return out.str();
}
}
请注意,这与this answer基本相似,但建议使用std::string
代替const char *
删除微妙的错误。
关于shared_ptr
,Foo
的每个方法都应该以{{1}}透明地公开,所以我希望这只是工作。