在我的模板“智能指针”类中,我希望有单独的构造函数和赋值运算符,它们分别作为参数,左值和右值指针。我该如何编写这些函数?
答案 0 :(得分:2)
在C ++ 11中,它非常简单,因为接受rvalue引用的重载不会优先于接受左值引用的重载,但是rvalues和rvalues可以绑定到前者:
#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
。