怎么会呢boost.python处理std::string成员变量? 具体地说,如果我有一个类boost.python包装纸
class A {
public:
std::string name;
};
class_<A>("AWrapper")
.def_readwrite("name", &A::name);
std::string object与它(string)表示的PyObject之间的对应关系是如何处理的: 是否创建了boost::python::object(即PyObject)来存储指向字符串的指针,因此该对象作为代理服务器? 所以,每次我想检索字符串成员的值时,都会创建PyString对象? 内部机制可以应用于这种字符串对象吗?在
简而言之:您对行为的怀疑和洞察力基本上是正确的,boostpython将解释您的配置以生成一个简单而低效的行为,但是它提供了支持机制来覆盖和扩展这种行为。这可能需要很多工作。在
长话短说:
没有
Python字符串是不可变的,默认情况下(根据您的配置),boostpython会将std::string转换为新的Python字符串(str)。所以没有代理。在
是的。下面的断言将失败,我试图验证对字符串的python引用是否具有相同的python对象id
例如,如果可以为给定的c++字符串启用创建的python字符串对象的缓存,那么在可用时返回先前创建的python字符串对象?答案也是肯定的,这是可能的。boost python的概念是call policies或{a2}。(两者都不是boost python教程的一部分。)
您可以使用适当的调用策略扩展每个}的通用内置转换器,以引入这个理论缓存。在
def_readwrite
调用,或者重写std::string
到{请记住,python字符串是不可变的,std::string是可变的。因此,当成员从C++侧改变时,您将面临问题。此外,当代码处理每一个get和set操作时,这样的钩子也会降低运行时的性能。在
相关问题 更多 >
编程相关推荐