Как решить эту проблему, вызванную перегрузкой функций?

У меня есть кусок кода, похожий на этот:

#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&) ‘неоднозначно

Как я могу преодолеть эту проблему?

1

Решение

Вы можете пройти по постоянной ссылке const T& чтобы он также принимал буквальные константы или передавал ссылку на rvalue T&& вместо T так что он будет принимать только значения r (например, буквальные константы)

2

Другие решения

Других решений пока нет …