swig:让 c++ 对象在 perl 中可打印?

Posted

技术标签:

【中文标题】swig:让 c++ 对象在 perl 中可打印?【英文标题】:swig: make c++ objects printable in perl? 【发布时间】:2015-02-15 22:34:00 【问题描述】:

我正在使用 SWIG 为我的 c++ 类创建 perl 绑定。每个类在 C++ 中都有一个 printMe(std::ostream&) 方法,以获得良好的输出。我可以让我的类在 Perl 中可打印,这样下面的代码就会产生这样好的输出吗?

my $v = new MyVector();
print $v;

【问题讨论】:

【参考方案1】:

从你在这里写的,可能不是。看起来printMe() 方法实际上将格式化的字符串发送到输出流,这不是那么有用。你需要的是一个创建字符串然后返回它的方法,所以它可以被传递到 Perl 级别,然后作为参数提供给 Perl 的 print 内置函数。

如果有返回合适字符串形式的 C++ 方法,您需要阅读 perldoc overload 以了解如何更方便地使用它。

【讨论】:

制作这个to_string 方法很简单:std::ostringstream strm; printMe(strm); return strm.str(); 问题是我找不到我应该重载的确切内容,因此 perl 可以理解 print $v; 构造。 字符串化操作符。类似use overload '""' => \&to_string;

以上是关于swig:让 c++ 对象在 perl 中可打印?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SWIG (AIX 5.1) 从 Perl 调用 C++ 库时崩溃

swig c++ to perl : 如何使用 c++11 字符串 STL 函数

在控制台中打印特殊字符 (C++/C#/SWIG)

SWIG、CPP 和 Perl [关闭]

在 SWIG 中携带自定义 Python 数据的 C++ 对象

如何为 wchar_t 定义 swig typmap 以与 Perl 脚本绑定?