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

除非你想改變輸入參數一個const左值引用將做的工作,因爲右值引用可以綁定到const左值參考:

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

LIVE DEMO

然而,你可能只是:

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

LIVE DEMO

+0

這是完美的工作。但是如果我想要兩個安全打印功能呢?或者這是愚蠢的事情? –

+0

如果你想有兩個獨立的打印功能,那麼你應該有兩個重載,如你的例子。然而,從實際的角度來看,如果你只想打印(即不改變輸入參數),一個帶有輸入參數'const'左值引用的函數就足夠了。 – 101010

+0

我想爲T&和其他T &&打印功能有兩個saperate模板,但它不工作。 –