我想写一个gdb python脚本来传递一个类。
但我无法在c ++ static_cast
之后得到类型。
original type
class {
...
private:
__iter_pointer& __begin_node() _NOEXCEPT {return __begin_node_;}
__iter_pointer __begin_node_;
...
}
在其他地方,将__begin_node强制转换为__node_pointer,然后在__node_pointer中使用数据成员__value_。
__node_pointer __cache = static_cast<__node_pointer>(__begin_node());
__cache->__value_ = _VSTD::move(__t.remove(__t.begin())->__value_);
python代码是:
def children(self):
begin = self.val['__tree_']['__begin_node_']
nodetype = begin.type
size = self.val['__tree_']['__pair3_']['__first_']
fmt = lambda count,value : ('[%s]' % value['first'], value['second'])
return CxxRbTreeIterator(nodetype, begin, size, fmt)
听到我们得到一个节点类型,它是&#39; __ begin_node&#39;的类型,即。 &#39; __ iter_pointer&#39;,然后我们将它转发给CxxRbTreeIterator。
.................
在CxxRbTreeIterator中,
def __next__(self):
count = self.count
self.count = self.count + 1
if count == self.size:
raise StopIteration
value_ptr = self.begin.cast(self.nodetype)
value = value_ptr.dereference()['__value_']
self.begin = self.get_next_node(self.begin)
return self.fmt(count, value)
这里,value_ptr得到__iter_pointer类型,然后值想得到它的&#39; member __value_,但__value_是__node_pointer的成员而不是__iter_pointer。所以python出错了,没有成员__value _。