【问题标题】:Converting a C++ String Class to a Python String将 C++ 字符串类转换为 Python 字符串
【发布时间】:2015-04-01 12:40:38
【问题描述】:

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

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

【问题讨论】:

    标签: python c++ swig


    【解决方案1】:

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

    __str __

    对象的方法或直接传递一个 char*(我在 swig docs 中看到了这一点,但我从未遵循这种方式)。

    【讨论】:

      【解决方案2】:

      原来正确的解决方案是:

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

      不是很直观,但很有效。

      【讨论】:

      • 你应该使用PyObject* PyString_FromString(const char *v)而不是格式。
      猜你喜欢
      • 1970-01-01
      • 2016-12-16
      • 2011-02-03
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多