67

可動オブジェクトの周りにプロキシ コンテナー クラスがあり、プロキシが基になるオブジェクトへの右辺値参照を暗黙的に生成できるようにしたいと考えていますが、プロキシ自体が移動されている場合のみです。

提案 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;
};
4

1 に答える 1

4

良い質問。最近、同様の種類のプロキシ クラスを作成しようとしましたが、適切な解決策が得られませんでした。私が見つけた最良の方法は、プロキシがr値である必要があるすべての使用でメンバー関数を呼び出すことでした:

ORef<T> move() {
    return ORef<T>( this->release() );
}

これにより、何かを r 値として宣言するセマンティクスが から に変更std::move(proxy)されproxy.move()ますが、別の型のオブジェクトを返す可能性も可能になります (必要な型に暗黙的に変換可能)。

これを使用する私のコーディング慣行は、プロキシ オブジェクトを常に右辺値として渡し、セマンティクス (移動、共有参照、コピーなど) を手動で指定することを強制していましたが、もちろん、使用エラーが潜在的な問題になります (たとえばx.move()、 の最終的な使用前の呼び出しx) 。 .

于 2013-03-04T10:05:25.103 に答える