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

これで の型が$client変わり、メソッドをobject呼び出すことができます。Clientこれは合理的な回避策ですか?そうでない場合、私は何をすべきですか?

4

1 に答える 1

0

http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_smart_pointersをご覧ください;)

于 2010-12-20T19:18:41.643 に答える