【问题标题】:how to call references in C methods wrapped by swig in php如何在 php 中由 swig 包装的 C 方法中调用引用
【发布时间】:2012-09-09 12:06:07
【问题描述】:

在我的 php 代码中调用引用有一个严重的问题。我用 swig 包装了我的 c++ 类并想调用该方法,在阅读了手册后我发现,在 SWIG 中,当我们有 c++ 参数中的引用时:

class foo {
Public;
double bar(double &a);
}

在 swig 包装类中我们有:

double foo_bar(foo *obj,double *a) {
obj->bar(*a);}

我完全理解,我的问题是如何在 PHP 代码中调用方法栏? 我开始了:

$ptr_a = &$a
$obj->bar($ptr_a);

但它不起作用。有什么想法???

【问题讨论】:

  • @h2co3 一开始我也这么认为,但结果证明它接近合法的 PHP 语法。

标签: php c++ pointers reference swig


【解决方案1】:

我尝试使用 phppointers.i 和 REF 类型映射来创建使用 PHP 引用概念的东西。我无法让它工作,但是使用 cpointer.i 处理此类事情的标准、语言中立的 SWIG 方法工作得很好:

%module test

%include <cpointer.i>

%pointer_class(double,Double);

%inline %{
  void func(double& a) {
    a = -666.0;
  }
%}

按预期工作:

<?php
include('test.php');
echo "testing\n";
$a=new Double(0.0);
test::func($a);
echo "In PHP: " . $a->value() . "\n";
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2011-10-04
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多