【发布时间】:2013-01-11 20:20:26
【问题描述】:
我有一个围绕可移动对象的代理容器类,并希望代理能够隐式产生对底层对象的右值引用,但仅在代理本身被移动时。
我相信我将能够按照提案 n2439 "Extending move semantics to *this" 实现此行为,但它在 gcc 的版本中尚不可用,并且暂时不会。
下面的代码是我最终的目标,但目前还不可能。在我可以使用此功能之前,是否有任何等效的解决方法?
template< class T >
struct movable_proxy {
operator T&&() && {
return std::move(value);
}
operator const T&() const& {
return value;
}
private:
T value;
};
【问题讨论】:
-
我认为你能得到的最接近的是一个显式进行转换的函数,而不是一个转换运算符,所以你不得不说
convert_proxy(p),它为右值重载和左值返回T&&或const T&...但这使得代理的使用不透明,这可能不是你想要的 -
我很好奇。对不起,缺乏理解,但我想得到它。如果您删除新提出的
&&和&修饰符,您究竟缺少什么? -
记录在案,give it a go inclang 2.9。
-
@Omnifarious,只是因为它还没有实现。这是缺少的最后一个核心语言功能,但对它的需求(或恕我直言)远少于 lambda、右值引用等。它将在 GCC 4.9 中,对于某些
x > 0甚至可能是 4.8.x
标签: c++ c++11 move-semantics rvalue-reference