【问题标题】:How do I ensure that the same Python instance is always returned for a particular C++ instance?如何确保始终为特定的 C++ 实例返回相同的 Python 实例?
【发布时间】:2010-07-05 21:29:48
【问题描述】:

我正在使用 Boost.Python 来包装一个 C++ 库。

如何确保始终为特定 C++ 实例(通过指针标识)返回相同的 Python 实例(按对象标识)?我无法扩展 C++ 类,但如果有帮助,我可以添加成员变量(例如 PyObject * 或 boost::python::handle)。我在想我应该能够在 C++ 实例中缓存 Python 实例,并返回缓存的实例而不是创建一个新实例。但是,我不知道需要什么包装代码。

要包装的示例类:

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

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

谁能提供建议?

【问题讨论】:

  • 我尝试这样做,但遇到了 GC 的各种问题。我已经辞职了,id() 标识(临时创建的)包装对象,而不是 C++ 对象。我以其他方式识别我的 c++ 对象。

标签: c++ python boost boost-python


【解决方案1】:

在这个问题上投入了一些时间后,我得出的结论是,麻烦大于价值。我已经辞职了,id() 将识别(可能是短暂的)包装对象,而不是实际的 C++ 对象。

相反,我以其他方式识别我的 C++ 对象,例如通过查看内容。

【讨论】:

  • 我知道这不是你希望听到的。这也不是我想听到的。我希望有人会突然出现并证明我错了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多