我有一个能够以普通ASCII或宽格式输出字符串的C ++类。我想将Python中的输出作为字符串。我正在使用SWIG(版本3.0.4)并阅读了SWIG文档。我相信我需要使用typemap构造来实现我的目标。我写了以下内容:
%typemap(out) my_namespace::MyString *
{
$result = PyString_AsString($1);
}
没有成功。当我尝试从Python访问C ++字符串时,我得到以下输出:
<Swig Object of type 'MyString *' at 0x02B6FC68>
显然,我做错了什么。谁能指出我正确的方向?提前谢谢。
答案 0 :(得分:0)
我将pyboost用于C ++ / python接口,并且很容易做到这一点。如果可以,我推荐它。一个简单的std :: string自动映射到python字符串。在你的情况下,可能任何解决方案都是定义一个
__ str __
对象的方法或直接传递char *(我在swig文档中看到,但我从未按照这种方式)。
答案 1 :(得分:0)
事实证明正确的解决方案是:
%typemap(out) my_namespace::MyString &
{
$result = PyString_FromFormat($1->c_str());
}
不是很直观,但确实有效。