簡體   English   中英

如何在SWIG中獲取與C ++對象關聯的* PyObject *?

[英]How do I get *the* PyObject* associated with the C++ object in SWIG?

我能夠使用SWIG_NewPointerObj傳遞一個C ++對象到Python,但它不是的PyObject *,所以我不能在Python正確地使用它。

我的問題是 :有沒有辦法在C ++中獲取從Python創建的C ++對象 PyObject *?

每個C ++對象沒有唯一的PyObject 例如,如果包裝以下內容:

struct foo {};

struct foo *test() {
  static struct foo inst;
  return &inst;
}

Python中對test()每次調用都會返回一個新的PyObject -SWIG無法輕松地知道它們是否相同。

返回的PyObject是瘦包裝器,即C ++對象周圍沒有本地狀態的代理。 從Python的角度來看,這些外觀和行為都類似於同一對象,因為它們將所有內容都委托給C ++對象。

如果您想擁有一個 PyObject ,可以采取一些方法,但是總的來說,這不是一個好主意,因為您對該對象所做的任何更改都不會從其他PyObject看到,即使它們引用了相同的C ++。賓語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM