2016-03-02 83 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&&代替,它只會接受右值(如字面常量)