Bub*_*aya 1 c++ templates function-pointers
在下面的代码中
template<class T> void f(T);
int main(){
f(3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
像往常一样,模板参数intfor 会自动推导。
但在
template<class T> void f(T);
template<class T> void (*p)(T) = f<T>;
int main(){
p(3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器(clang++)坚持认为p(3)需要模板参数。为什么?
此外,如果我将该行放在template<class T> void (*p)(T) = f<T>;标头中以供多个文件包含,会导致问题吗?
模板参数推导适用于 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);
}
Run Code Online (Sandbox Code Playgroud)