2012-02-11 22 views
2

在我的模板「智能指針」類中,我想要有單獨的構造函數和賦值運算符,它們分別取左值和右值指針作爲參數。我應該如何編寫這些功能?基於參數是左值還是右值,我可以重載一個函數嗎?

+1

什麼是「指針構造函數」,不介意左值/右值部分?你能給個例子嗎? – 2012-02-11 19:47:03

+1

@GregHewgill:聽起來他正在談論指針作爲參數。 – 2012-02-11 19:47:23

+0

試圖做一個智能指針,可以指向一個左值 – bitwise 2012-02-11 19:50:17

回答

2

在C++ 11它真的很容易,因爲過載接受一個右值引用並不優先於一個接受左值參考,但右值只有右值可以綁定到前:

#include <iostream> 
using std::cout; 

void f(int*&) { 
    cout << "lvalue_ptr "; 
} 

void f(int*&&) { 
    cout << "rvalue_ptr "; 
} 

int* get_rvalue_ptr() { 
    return 0; 
} 

int main() { 
    int* ptr1; 
    f(ptr1); 
    f(get_rvalue_ptr()); 
} 

// Output: lvalue_ptr rvalue_ptr 

(很明顯,上面的過載結構也可以應用到你的成員函數中。)

雖然我不確定如何在C++ 03中使用它。我認爲Boost有is_rvalue,你可以在模板參數中使用。

相關問題