2013-11-20 23 views
1

我聽說模板可以用來通過靜態多態複製動態多態。如果是這種情況,我很困惑它是如何工作的。當行爲可能不同時,模板如何複製動態多態性?

我認爲模板的目的是複製完全相同的行爲,但跨不同的類。在契約動態多態性允許你調用不同的類完全相同的API(它可以在函數中有不同的行爲)?如果在對象中存在不同的行爲,模板如何實現這一目標?

+2

您要求我們評論*您聽過的* *嗎?你爲什麼不問問誰告訴你他們的意思? –

+0

你有什麼參考?據我所知,模板是嚴格的編譯時工具。 「多態性」可以使用沒有模板的調度表來實現,儘管使用模板可以在某種程度上「自動化」過程... – defube

回答

3

下面是一個例子:

template <typename T> 
class logger 
{ 
    public: 

    void log(const std::string& str) 
    { 
    this->_interface.kindof_virtual_method_without_runtime_cost(str); 
    } 

    private: 

    T _interface; 
}; 

class on_console{...}; 
class on_network{...}; 

int main(void) 
{ 
    logger<on_console> logger_console; 
    logger<on_network> logger_network; 

    logger_console.log("debug"); 
    logger_network.log("release"); 

    return 0; 
} 

我想到了模板的目的是複製完全相同的行爲,但在不同的類。在合同的動態多態可調用不同類別

正如你可以在上面的例子中看到的完全一樣的API(這可以在功能不同的行爲),它是一個模板,讓您調用完全相同的API(以下簡稱「kindof_virtual_method_without_runtime_cost」成員函數),它可以有不同類別

這大概就是被

意味着通過靜態的多晶型複製動態多態性指出錯誤行爲當然,這並不適用於依賴於運行條件(用戶輸入等)的情況下ISM

的多態性研究分支必須在編譯時已知