存在引用和值重载时的函数调用不明确

时间:2018-12-08 16:35:58

标签: c++ oop overloading

我有以下课程:

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

1 个答案:

答案 0 :(得分:1)

您打算调用哪个函数是模棱两可的,因为作为参数传递给该函数的任何l值都可以隐式转换为引用,因此不可避免,如Function Overloading Based on Value vs. Const Reference中所述。 >

您可以更改此:

void Add(T item) {}

对此:

void Add(T&& item) {}

Live demo