我有一段类似的代码:
#include <iostream>
using namespace std;
template<typename T>
class Class
{
public:
Class() {}
void foo(T) {cout << "foo(T) is called \n";}
void foo(T&) {cout << "foo(T&) is called \n";}
};
int main()
{
Class<int> c;
int a = 1;
c.foo(1);
c.foo(a);
return 0;
}
我想同时拥有函数的重载,foo
因为foo(T&)
它更有效,但我不能使用文字常量作为它的参数,并且foo(T)
将适用于文字常量,尽管它不如foo(T&)
. 但是当我定义这两个函数时,将会有一个模棱两可的调用何时c.foo(a)
执行。
错误:重载 'foo(int&)' 的调用不明确
我该如何克服这个问题?