Как я могу гарантировать, что один и тот же экземпляр Python всегда возвращается для конкретного экземпляра C ++? - PullRequest
3 голосов
/ 06 июля 2010

Я использую Boost.Python, чтобы обернуть библиотеку C ++.

Как мне обеспечить, чтобы один и тот же экземпляр Python (по идентификатору объекта) всегда возвращался для конкретного экземпляра C ++ (по идентификатору указателя)? Я не могу расширять классы C ++, но я могу добавить переменную-член (такую ​​как PyObject * или boost :: python :: handle <>), если это поможет. Я думаю, что я должен быть в состоянии кэшировать экземпляр Python в экземпляре C ++ и возвращать кэшированный экземпляр вместо создания нового. Однако я не могу понять, какой код переноса необходим.

Пример класса для переноса:

class C {
public:
    boost::python::handle<> wrapper_;

private:
    C();
    C(const C &);
    ~C();
};

Может кто-нибудь дать совет?

1 Ответ

1 голос
/ 12 июля 2010

Потратив некоторое время на эту проблему, я пришел к выводу, что это больше проблем, чем стоит.Я смирился с тем, что id () будет идентифицировать (потенциально недолговечный) объект-обертку, а не фактический объект C ++.

Вместо этого я идентифицирую свои объекты C ++ другим способом, например, просматривая содержимое.

...