假設您有一個程序,其中舊代碼執行相同的工作,除了他們在兩個不同的上下文中執行它:一個在GUI中執行,另一個在一個API中。說你想重構它們爲了合併/合併代碼,所以你只有一個代碼爲API的兩個API &工作。專用函數的行爲取決於調用者/上下文
但有一個問題:代碼段不是100%相同的。與API相比,GUI必須執行一些附加工作(例如在GUI中,所做的每個更改都必須通過撤銷/重做系統,但不在API中,因爲它不使用撤銷/重做)。
所以說你可以合併你代碼片段80%的行爲,但是你剩下20%必須是專用的 API vs GUI(即不能按定義彙集/合併)。
你會如何解決這個問題?
我想到:
- 創造一種特定的代碼將通過回調(例如函子)被注入一個共同的功能;
- 或者:創建一個模板常用函數,調用其他模板子函數。由於這些子功能也是模板化的,所以它們可以具有模板專門化,這是API的一個專門化。通用模板化函數的參數化將確保調用正確的子函數的模板特化。
但是,這些解決方案滿足了我:
經過幾個回調函數可真讓其簽名凌亂的速度非常快;當你開始模板化時,你最終可能會模仿大多數涉及的功能(這當然取決於你的代碼,但在我的情況下,這是一個問題)。
任何其他想法的人?
[標籤調度](http://www.generic-programming.org/languages/cpp/techniques.php#tag_dispatching)通常是處理這種情況的一種乾淨方式。但是,現在您的問題太模糊了。請提供您當前代碼的MCVE,以及您提出的兩個解決方案以及與他們的問題,以增加獲得具體和相關答案的可能性。 – Pradhan