我聽說模板可以用來通過靜態多態複製動態多態。如果是這種情況,我很困惑它是如何工作的。當行爲可能不同時,模板如何複製動態多態性?
我認爲模板的目的是複製完全相同的行爲,但跨不同的類。在契約動態多態性允許你調用不同的類完全相同的API(它可以在函數中有不同的行爲)?如果在對象中存在不同的行爲,模板如何實現這一目標?
我聽說模板可以用來通過靜態多態複製動態多態。如果是這種情況,我很困惑它是如何工作的。當行爲可能不同時,模板如何複製動態多態性?
我認爲模板的目的是複製完全相同的行爲,但跨不同的類。在契約動態多態性允許你調用不同的類完全相同的API(它可以在函數中有不同的行爲)?如果在對象中存在不同的行爲,模板如何實現這一目標?
下面是一個例子:
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
的多態性研究分支必須在編譯時已知
你所尋找的是一個特殊的用途CTRP C++習慣用法,在某些情況下,它可以替代靜態的動態多態。 請參閱http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern#Static_polymorphism
您要求我們評論*您聽過的* *嗎?你爲什麼不問問誰告訴你他們的意思? –
你有什麼參考?據我所知,模板是嚴格的編譯時工具。 「多態性」可以使用沒有模板的調度表來實現,儘管使用模板可以在某種程度上「自動化」過程... – defube