2016-03-02 91 views
1

我有一个类似的一段代码:如何解决函数重载造成的歧义?

#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

我该如何解决这个问题?

+2

使用一个函数'无效美孚(const T&)'。 –

回答

2

您可以通过const引用const T&通过,使得它也将接受字面常量或右值引用传递的TT&&代替,它只会接受右值(如字面常量)