【问题标题】:SWIG INOUT types (C++ to Python)SWIG INOUT 类型(C++ 到 Python)
【发布时间】:2019-04-08 06:54:45
【问题描述】:

我正在为 C++ api 创建一个 python 包装器,使用模板或多或少地支持某些类型,但 api 需要一些变量通过引用,其中一个是 int,另一个是 float。

如果我没记错的话,它是通过创建一个 INOUT 应用来完成的:

%apply float& INOUT { float& a };
%apply int& INOUT { int& a };

但是我如何在我的 python 中使用这些类型呢?

提前感谢您的任何提示。

【问题讨论】:

    标签: python c++ cmake swig inout


    【解决方案1】:

    这些参数是从生成的 python 函数返回的(考虑到包装的 C++ 函数签名,并不完全直观)。假设这是您公开的功能:

    %apply float& INOUT { float& a };
    %apply int& INOUT { int& b };
    
    void foo(float& a, int& b);
    

    你可以从 python 调用它

    a = 3.14
    b = 42
    
    a, b = foo(a, b)
    

    如果不捕获返回值,ab 保持不变。

    【讨论】:

    • 不幸的是它对我不起作用 a = 0 b = 0.0 a , b = mu.foo(False, a , b) TypeError: in method 'MyApi_foo', argument 3 of type 'int &' 实际函数是 foo(bool, int&, float&)
    • 好吧,你应该将解决方案调整为你试图调用的实际函数:) 因为你没有将它与其余的 sn-p 一起发布,上面是一个例子一般情况下这是如何工作的。
    【解决方案2】:

    亲爱的未来读者,这些是您正在寻找的机器人:

    myapi.new_intp()
    myapi.new_floatp()  
    myapi.intp_value(a)
    myapi.floatp_value(b)
    myapi.delete_intp(a)
    myapi.delete_floatp(b)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2016-11-26
      • 2017-05-09
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多