boy*_*ycy 67 c++ rvalue-reference move-semantics c++11
我有一个围绕可移动对象的代理容器类,并希望代理能够隐式地产生对底层对象的rvalue引用,但仅在代理本身被移动时.
我相信我将能够按照提议n2439 "将移动语义扩展到*this"来实现此行为,但它尚未在gcc的发行版中提供,并且暂时不会出现.
下面的代码是我最终的目标,但目前无法实现.在此功能可用之前,是否有任何等效的解决方法?
template< class T >
struct movable_proxy {
operator T&&() && {
return std::move(value);
}
operator const T&() const& {
return value;
}
private:
T value;
};
Run Code Online (Sandbox Code Playgroud)
好问题。我最近尝试编写类似的代理类,但从未实现良好的解决方案。我发现最好的方法是在每次使用时调用成员函数,其中代理需要是右值:
ORef<T> move() {
return ORef<T>( this->release() );
}
Run Code Online (Sandbox Code Playgroud)
这改变了将某些东西声明为右值的语义,从std::move(proxy)to proxy.move(),但也允许返回不同类型的对象(隐式转换为您所需的类型)。
我使用它的编码实践是始终将代理对象作为右值传递,这强制手动指定语义(移动、共享引用、复制或其他),但这当然会使使用错误成为潜在的问题(例如,在x.move()最终使用之前调用x) 。
| 归档时间: |
|
| 查看次数: |
2784 次 |
| 最近记录: |