在下面的代碼中
template<class T> void f(T);
int main(){
f(3);
return 0;
}
像往常一樣,模板引數int自動推導。
但在
template<class T> void f(T);
template<class T> void (*p)(T) = f<T>;
int main(){
p(3);
return 0;
}
編譯器(clang )堅持p(3)需要一個模板引數。為什么?
此外,如果我將該行template<class T> void (*p)(T) = f<T>;放在一個標題中以被多個檔案包含,那會導致問題嗎?
uj5u.com熱心網友回復:
模板引數推導適用于函式模板和 C 17 中的 CTAD。對于您的示例,撰寫包裝器是微不足道的。
template<class T> void f(T);
template<class T> void (*p)(T) = f<T>;
template<typename T> void Wrapper(T&& t)
{
p<T>(std::forward<T>(t));
}
int main(){
Wrapper(3);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/515121.html
標籤:C 模板函数指针
上一篇:作為類模板的成員的正確語法
