std::streams はすでに移動可能ですか?
質問
GNU gcc 4.3 は、次期 c++0x 標準を部分的にサポートします。実装された機能の中には右辺値参照があります。右辺値参照を使用すると、コピー不可能なオブジェクトを移動したり、関数からオブジェクトを返したりできる必要があります。
std::stream はすでに移動可能ですか 右辺値参照による それとも現在のライブラリ実装には何かが欠けているのでしょうか?
解決
現在の g++ svn では、右辺値参照のサポートはまだストリームに追加されていません。パッチを追加するのはそれほど難しいことではないと思います。オープン ソース ソフトウェアの場合と同様に、パッチは間違いなく歓迎されます。
他のヒント
簡単な調査の結果、右辺値参照のサポートがまだストリームに追加されていないことがわかりました。
実際に関数からコピー不可オブジェクトを返すには、次のように moveコンストラクタを実装するだけで十分です:
struct noncopyable
{
noncopyable()
{}
// move constructor
noncopyable(noncopyable &&)
{}
private:
noncopyable(const noncopyable &);
noncopyable &operator=(const noncopyable &);
};
このようなコンストラクターは、所有権を新しいオブジェクトに転送し、デフォルトの状態で渡されるようにします。
とはいえ、この方法で関数からオブジェクトを返すことは可能です:
noncopyable factory()
{
noncopyable abc;
return std::move(abc);
}
std :: streamは移動コンストラクターをサポートしていませんが、gcc 4.3.2に同梱されているSTLコンテナーは既にサポートしているようです。
所属していません StackOverflow