我有一段类似的代码:
#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&amp;)'是不明确的
我该如何克服这个问题?
答案 0 :(得分:2)
您可以传递const引用const T&
,以便它也接受文字常量,或者通过右值引用T&&
而不是T
来传递它,这样它才会接受rvalues(就像文字一样)常数)