Обёртывание boost :: shared_ptr в PHP с использованием SWIG - PullRequest
4 голосов
/ 20 июля 2010

Если я использую 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 методы.

Какие у меня есть варианты для переноса этой функции? Я создаю оболочку PHP для чужой библиотеки C ++, поэтому переделка кода без boost::shared_ptr на самом деле не вариант.

Это единственное решение, которое я придумала до сих пор:

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

И вызывая его в PHP:

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

Теперь тип $client равен object, и я могу вызывать Client методы для него. Это разумный обходной путь? Если нет, что мне делать?

1 Ответ

0 голосов
/ 20 декабря 2010

Вы должны взглянуть на http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_smart_pointers;)

...