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)执行。

错误:重载 'foo(int&)' 的调用不明确

我该如何克服这个问题?

4

1 回答 1

2

您可以通过 const 引用传递,const T&以便它也接受文字常量,或者通过右值引用T&&而不是T只接受右值(如文字常量)

于 2016-03-02T19:27:17.693 回答