У меня есть кусок кода, похожее на это:Как решить неоднозначность, вызванную перегрузкой функции, как это?
#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)
собирается выполнить.
error: call of overloaded 'foo(int&)' is ambiguous
Как я могу решить эту проблему?
Используйте одну функцию 'недействительными Foo (const T &) '. –