如果您重载一个函数,然后使用与其中一个重载完全匹配的参数调用它
int f(int){return 3;}
int f(bool){return 4;}
... //inside main()
f(1); //Calls f(int)
编译器在尝试任何隐式转换之前简单地选择这个(完美)匹配。但是我一直在尝试重载函数 tempĺate ,如
template <bool veracity>
int f(){return 1;}
template <int amount>
int f(){return 2;}
... //inside main()
f<1>();
但编译器一直抱怨对重载的 f() 的调用不明确,说它可能是f<true>()
or 或f<1>()
. 编译器不应该只选择完美匹配,而不是尝试将1转换为true吗?
我的印象是模板参数的隐式转换实际上比函数参数的隐式转换更具限制性。有没有办法解决这个问题?