改变这是什么

2024-01-08

有没有办法改变 THIS 指向的内容?

class foo{...}

foo* fooinstance = new foo();
foo* otherfooinstance = new foo();

void
foo::bar(){
    this = otherfooinstance;
}

fooinstance->bar();

对于那些想知道在什么情况下我会更改 this 指针的人来说,这里是情况。我必须进行树递归,其中必须删除中间节点。对于此示例,我们假设删除的中间节点的标题为 d。并且这些中间节点只有一个子节点。所以用 Lisp 表示法如果我们有一棵像这样的树

(g(d(i 4))(i 5))

函数removeIntermediates(tree)实际上会导致上面的变成

(g (i 4) (i 5))

如果 this 指针是可重新分配的,则此指针的伪代码如下所示。

DTREE::removeIntermediates(){
    this = child(0); removeIntermediates();
}

TREE::removeIntermediates(){
    for each child { child->removeIntermediates();
}

我想在不知道子节点是什么的情况下执行此操作,因此使代码可分解为每个节点类型的不同函数,并具有其他类型的通用函数。 可悲的是,我最终做了这样的事情..

TREE::removeIntermediates(){
    for each child { if(child->name == "d") {
        setchild(child->child(0));
        child->removeIntermediates();
    }
    else { child->removeIntermediates();}
}

No, this是不可修改的。

从概念上讲这没有意义你想达到什么目的 http://www.catb.org/esr/faqs/smart-questions.html?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

改变这是什么 的相关文章

随机推荐