短版本:如何在运行时更改方法的行为?
重点是一个实例的(复杂)状态可以被该类的定义之外的函数改变,因为这样的类可以被扩展为具有各种内部状态而不会污染许多国家制定者的阶级定义。
假设下面的代码:
class bar
{
virtual void ChangeState()=0;
}
class foo:bar
{
private:
int b;
public:
void ChangeState() {b=3;}
}
我想要做的是创造不同的功能,然后将它们传递给函数,在运行时,像
foo.ChangeState(); //b is 3 now
void foo::(?)ChangeState2(){ b=2; };
foo.ChangeState=ChangeState2;
foo.ChangeState(); //b is 2 now
可不可以这样的构建用C++实现,而不使用黑客?
没有办法,你可以[语言的定义在运行时更改C中的函数++,显然,如果你可以在内存中找到正确的地址,并使内存可写,你可以写入新的指令到内存]。 –
@MatsPetersson:你可以改变一个函数_pointer_ –
@Minging Duck:显然,是的。这是一种选择。 –