如果我使用 SWIG 来包装这个 C++ 函数:
boost::shared_ptr<Client> Client::create() {
return boost::shared_ptr<Client>(new Client());
}
然后在 PHP 中调用它:
$client = Client::create();
echo gettype($client);
$client
is resource
, not的类型object
,所以我不能调用Client
方法。
包装此功能的选择是什么?我正在为其他人的 C++ 库创建一个 PHP 包装器,因此重新编写代码以使其不使用boost::shared_ptr
并不是一个真正的选择。
这是我迄今为止提出的唯一解决方案:
MyClient Client::createObject() {
return *Client::create();
}
并在 PHP 中调用它:
$client = Client::createObject();
echo gettype($client);
现在的类型$client
是object
,我可以调用Client
它的方法。这是一个合理的解决方法吗?如果没有,我该怎么办?