SWIG:python中结构和赋值的自定义类型

时间:2014-05-16 22:13:00

标签: python c++ swig

我的C ++代码有这样的东西:

struct Data
{
    CustomType member;
};

我的swig .i文件包含%typemap(in)和%typemap(out),用于将Python字符串转换为CustomType(这适用于参数和返回值)

在我的python中,我这样做:

d = Data()
d.member = "Hello"

python在运行时给出了这个错误: TypeError:在方法' Data_member_set'中,类型' CustomType *'

的参数2

我尝试以下操作无效:

%typemap(memberin) CustomType
{
    $target = *$source;
}

如何允许python让我分配给该成员?

2 个答案:

答案 0 :(得分:0)

如果可以从字符串创建CustomType,您应该可以

d.member = CustomType("Hello")

如果失败,那么你没有通过.i文件导出CustomType,或者它没有带字符串的构造函数。

答案 1 :(得分:0)

你需要写这样的东西:

    $_hasItems = ($_item->getCount() > 0);
    if(!$_hasItems) continue;

这意味着以下内容:

  1. Python不允许您覆盖assignemet运算符。代替     该SWIG为您的所有可能分配生成包装函数     C ++代码。在每个地方," ="可以     是它注入了包装函数的调用。
  2. 使用上面的' typemap'您可以初始化对象 来自a)CustomType和b)内置Pyton的CustomType     字符串。
  3. ' typemap'中的代码只是代码片段的一部分 由SWIG生成包装器。
  4. 您可以在包装函数中定义CustomType的局部变量。 第一行中的圆形paranthesis中的代码是本地的     范围是整个函数的变量。
  5. 我建议您打开* _pywrap.cxx文件(该文件由SWIG生成)并根据您的' typemap'检查它实际生成的内容。

    有关详细信息,请参阅官方文档:http://www.swig.org/Doc1.3/SWIGDocumentation.html