【发布时间】:2020-07-04 11:57:05
【问题描述】:
template<typename T> void printf_t(const T&, char='\n');
template<> void printf_t(const int&, char);
void (*pi)(const int&, char) = printf_t<int>;
int main()
{
int a;
scanf("%d", &a);
pi(a);
return 0;
}
我怎样才能使这段代码工作?我想在这个template<int> 特化中使用char 参数默认值,但是编译器说调用函数pi 的参数太少(它需要char)。以下代码也给出了错误:
template<typename T> void printf_t(const T&, char);
template<> void printf_t(const int&, char='\n');
void (*pi)(const int&, char) = printf_t<int>;
int main()
{
int a;
scanf("%d", &a);
pi(a);
return 0;
}
错误:
g++ template.cpp -o template
template.cpp:55:54: error: default argument specified in explicit specialization [-fpermissive]
55 | template<> void printf_t(const int&, char='\n');
|
当然我已经定义了printf_t<int>,但是它的body现在已经无关紧要了。
【问题讨论】:
标签: c++ templates template-specialization default-arguments