将C ++字符串类转换为Python字符串

时间:2015-04-01 12:40:38

标签: python c++ swig

我有一个能够以普通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>

显然,我做错了什么。谁能指出我正确的方向?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我将pyboost用于C ++ / python接口,并且很容易做到这一点。如果可以,我推荐它。一个简单的std :: string自动映射到python字符串。在你的情况下,可能任何解决方案都是定义一个

  

__ str __

对象的方法或直接传递char *(我在swig文档中看到,但我从未按照这种方式)。

答案 1 :(得分:0)

事实证明正确的解决方案是:

%typemap(out) my_namespace::MyString &
{
    $result = PyString_FromFormat($1->c_str());
}

不是很直观,但确实有效。