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
,你可以在模板參數中使用。
什麼是「指針構造函數」,不介意左值/右值部分?你能給個例子嗎? – 2012-02-11 19:47:03
@GregHewgill:聽起來他正在談論指針作爲參數。 – 2012-02-11 19:47:23
試圖做一個智能指針,可以指向一個左值 – bitwise 2012-02-11 19:50:17