如何在php中用swig包装的C方法中调用引用

时间:2012-09-09 12:06:08

标签: php c++ pointers reference swig

我在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);

但它不起作用。任何想法???

1 个答案:

答案 0 :(得分:0)

我选择使用phppointers.i和REF typemap来创建使用引用的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";
?>