【发布时间】:2016-03-02 19:21:57
【问题描述】:
我有一段类似这样的代码:
#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) 将适用于文字常量,尽管它不如 @ 高效987654325@。但是当我定义这两个函数时,c.foo(a) 将要执行时会出现一个模棱两可的调用。
错误:重载 'foo(int&)' 的调用不明确
我该如何克服这个问题?
【问题讨论】:
-
使用一个函数
void foo(const T&)。
标签: c++ literals overloading ambiguous-call