【发布时间】:2012-04-05 15:21:03
【问题描述】:
如果您重载一个函数,然后使用与其中一个重载完全匹配的参数调用它
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>() 或 f<1>()。编译器不应该只选择完美匹配,而不是尝试将 1 转换为 true 吗?
我的印象是模板参数的隐式转换实际上比函数参数的隐式转换更具限制性。有没有办法解决这个问题?
【问题讨论】:
标签: c++ templates overloading