带模板的函数重载

3
我有如下代码。
#include <iostream>
using namespace std;


void print(int& number){
    cout<<"\nIn Lvalue\n";
}

void print(int&& number){
    cout<<"\nIn Rvalue\n";
}

int main(int argc,char** argv){

    int n=10;
    print(n);
    print(20);
}

它运行良好。但我想创建一个函数模板,以便它可以接受左值和右值。有人能建议如何做吗?

1个回答

1

除非你想改变输入参数,否则const左值引用就可以完成工作,因为右值引用可以绑定到const左值引用:

void print(int const &number) {
    ...
}

LIVE DEMO

不过,您也可以:

template<typename T>
void print(T &&number) {
    ...
}

现场演示


这个程序完美地运行。但是如果我想要有两个单独的打印函数怎么办?或者这样做很愚蠢吗? - 01000001
如果你想要有两个不同的打印函数,那么你应该像你的例子中一样有两个重载。然而,从实际角度来看,如果你只想打印(即不改变输入参数),一个带有输入参数为const左值引用的单个函数就足够了。 - 101010
我正在尝试为两个打印函数分别创建两个不同的模板,一个使用T&,另一个使用T&&,但是它没有起作用。 - 01000001
是的,使用模板不起作用,因为由于某些C++标准规则,编译器无法区分两个重载之间的差异。 - 101010
那我想我只能接受只有一个打印了...不管怎样,非常感谢。 :) :) - 01000001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接