我正在尝试找到一种无错误编译的方法并执行以下操作:
template <class A>
void f(A a,A b=a){
//do something
}
但是当我调用像f<int>(3)
这样的函数时,编译器告诉我局部变量a
可能不会出现在上下文中。
我想这是因为编译器无法知道是否将值赋值给形式参数a
,以便它可以使用b
的值初始化形式参数a
。
我可以实现这样的功能吗?
答案 0 :(得分:8)
您可以提供调用双参数版本的重载:
template <class A>
void f(A a, A b){
//do something
}
template <class A>
void f(A a){
f(a, a);
}