短版本:如何在運行時更改方法的行爲?
重點是一個實例的(複雜)狀態可以被該類的定義之外的函數改變,因爲這樣的類可以被擴展爲具有各種內部狀態而不會污染許多國家制定者的階級定義。
假設下面的代碼:
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:顯然,是的。這是一種選擇。 –