2011-12-07 86 views
-3

我想知道是否可以在運行時更改應用程序的邏輯? Meybe我們可以用另一個實現來替換抽象類的實現嗎?或者,也許我們可以在運行時替換共享庫...在運行時更改應用程序的邏輯

更新:假設我有函數foo(X,Y)的兩個實現,並且可以使用基於strategy pattern任何人。現在我想知道是否可以在不重新啓動應用程序的情況下添加foo(x,y)的第三個實現。

+2

這聽起來像一個情況下,你應該重新考慮你的問題,而不是試圖做一些古怪。你想達到什麼目的? – Polynomial

+0

你的意思是類似[Delegation Pattern](http://en.wikipedia.org/wiki/Delegation_pattern)或者[Self-Modifying Code](http://en.wikipedia.org/wiki/Self-modifying_code) ?你需要指定_by who_另外的實現應該被添加! – moooeeeep

+0

@Meysam:現在你已經爲你的問題添加了一些東西,其答案也取決於你通過戰略模式*所瞭解的內容。你讀過嗎?如果你明白這一點,你面臨的困難是什麼? – Nawaz

回答

4

您可以使用公開新foo函數的插件(您將在運行時加載的庫)。 我記得我們在學校實施了類似的東西,一個計算器,我們可以在運行時添加新的操作,而不必重新啓動程序。見dlsymdlopen

附錄

要非常小心,當dlclose -ing,它是不是還有些活躍調用堆棧幀中使用的插件。在Linux上,您可以撥打數千次的電話dlopen(因此您可以不接受dlclose -ing插件,並有一些地址空間泄漏)。

+1

我添加了關於dlclose和dlopens的數量的評論 –

2

正如你所說的「用另一個實現替換抽象類的實現」如果你的意思是,你可以使用運行時多態並用另一組具體類的實例改變具體類的實例。

更具體地說,有一個衆所周知的模式,稱爲Strategy pattern正是爲了這個目的。看看wiki page,因爲它很好地解釋了這一點,即使有代碼示例和圖表。

+1

+1提及策略。 @Meysam看看這個http://www.webbiscuit.co.uk/articles/the-strategy-pattern/ –

0

虛擬函數的C++機制不允許您在運行時更改實現。

但是,您可以使用函數指針在運行時實現任何實現更改。

+0

你可以在插件中重新創建新類的適當實例。 –

相關問題