??假如我有一個需求,就是如果傳入的參數是int類型,我就輸出int類型,否則就輸出T。很顯然,根據模板的基礎知識,我們可以這么寫
template <class T>
void f(T) {
std::cout << "T\n";
}
template <>
void f(int) {
std::cout << "int\n";
}
??除了這樣寫,還有別的寫法嗎。我們可以思考一下.................這里我們其實可以用std::enable_if_t來實現,它相當于給std::enable_if的type類型起了一個別名,我們先看怎么寫。
template <class T>
std::enable_if_t<std::is_same_v<int, T>> g(T) {
std::cout << "int\n";
}
template <class T>
std::enable_if_t<!std::is_same_v<int, T>> g(T) {
std::cout << "T\n";
}
??假設我現在再提一個需求,就是只能實現一個函數,且只能接受int類型的參數,其它類型均不能通過編譯。這時候如果你僅僅單純地void f(int),那么即便你傳入double類型進來,它也會發(fā)生類型轉換并執(zhí)行這個函數,這并不是我們想要的。因此,我們可以考慮用std::enable_if_t來實現。文章來源:http://www.zghlxwxcb.cn/news/detail-709975.html
template <class T>
std::enable_if_t<std::is_same_v<int, T>> h(T) {
std::cout << "strictly int\n";
}
??好的,事情到這里結束。??文章來源地址http://www.zghlxwxcb.cn/news/detail-709975.html
到了這里,關于模板特化的多維度挖掘的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!