【发布时间】:2011-03-18 14:32:24
【问题描述】:
如果我使用 SWIG 来包装这个 C++ 函数:
boost::shared_ptr<Client> Client::create() {
return boost::shared_ptr<Client>(new Client());
}
然后在 PHP 中调用它:
$client = Client::create();
echo gettype($client);
$client 的类型是resource,而不是object,所以我不能调用Client 方法。
我有哪些包装这个函数的选项?我正在为其他人的 C++ 库创建一个 PHP 包装器,因此重新编写代码以不使用 boost::shared_ptr 并不是一个真正的选择。
这是迄今为止我想出的唯一解决方案:
MyClient Client::createObject() {
return *Client::create();
}
并在 PHP 中调用它:
$client = Client::createObject();
echo gettype($client);
现在$client 的类型是object,我可以在上面调用Client 方法。这是一个合理的解决方法吗?如果没有,我该怎么办?
【问题讨论】:
标签: php swig shared-ptr php-extension