我有以下课程:
template<typename T>
class List {
void Add(T& item) {//GOOD STUFF}
void Add(T item) {//More STUFF}
void Remove(T item) {//STUFF}
};
我正试图像下面那样使用它
List<MyClass> list;
MyClass obj;
list.Add(obj); //Here the compiler gets angry :((
关于这个问题,我已经找到了以下三个SO问题,但是我仍然无法调用这两个方法。
Ambiguous call with overloaded r-value reference function
function call ambiguity with pointer, reference and constant reference parameter
Ambiguous Reference/Value Versions of Functions
答案 0 :(得分:1)
您打算调用哪个函数是模棱两可的,因为作为参数传递给该函数的任何l值都可以隐式转换为引用,因此不可避免,如Function Overloading Based on Value vs. Const Reference中所述。 >
您可以更改此:
void Add(T item) {}
对此:
void Add(T&& item) {}