4

如果我使用 SWIG 来包装这个 C++ 函数:

boost::shared_ptr<Client> Client::create() {
    return boost::shared_ptr<Client>(new Client());
}

然后在 PHP 中调用它:

$client = Client::create();
echo gettype($client);

$clientis resource, not的类型object,所以我不能调用Client方法。

包装此功能的选择是什么?我正在为其他人的 C++ 库创建一个 PHP 包装器,因此重新编写代码以使其不使用boost::shared_ptr并不是一个真正的选择。

这是我迄今为止提出的唯一解决方案:

MyClient Client::createObject() {
    return *Client::create();
}

并在 PHP 中调用它:

$client = Client::createObject();
echo gettype($client);

现在的类型$clientobject,我可以调用Client它的方法。这是一个合理的解决方法吗?如果没有,我该怎么办?

4

1 回答 1

0

你应该看看http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_smart_pointers ;)

于 2010-12-20T19:18:41.643 回答