【发布时间】:2015-02-15 22:34:00
【问题描述】:
我正在使用 SWIG 为我的 c++ 类创建 perl 绑定。每个类在 C++ 中都有一个 printMe(std::ostream&) 方法,以获得良好的输出。我可以让我的类在 Perl 中可打印,这样下面的代码就会产生这样好的输出吗?
my $v = new MyVector();
print $v;
【问题讨论】:
我正在使用 SWIG 为我的 c++ 类创建 perl 绑定。每个类在 C++ 中都有一个 printMe(std::ostream&) 方法,以获得良好的输出。我可以让我的类在 Perl 中可打印,这样下面的代码就会产生这样好的输出吗?
my $v = new MyVector();
print $v;
【问题讨论】:
从你在这里写的,可能不是。看起来printMe() 方法实际上将格式化的字符串发送到输出流,这不是那么有用。你需要的是一个创建字符串然后返回它的方法,所以它可以被传递到 Perl 级别,然后作为参数提供给 Perl 的 print 内置函数。
如果有返回合适字符串形式的 C++ 方法,您需要阅读 perldoc overload 以了解如何更方便地使用它。
【讨论】:
to_string 方法很简单:std::ostringstream strm; printMe(strm); return strm.str(); 问题是我找不到我应该重载的确切内容,因此 perl 可以理解 print $v; 构造。
use overload '""' => \&to_string;