struct that
{
that &frob()
{
return *this;
}
that frob() const
{
return that(*this);
}
//that &&frob() && //<-called only if *this is an rvalue
//{
// return move(*this);
//}
that()
{
// make things
}
that(const that &other)
{
// copy things
}
that(that &&other)
{
// move things
}
};
明らかに、上記のコメントの関数は合法的なC ++ではありませんが、これを実現する方法があるかどうかを知る必要があります。
that().frob().frob().frob();
など、への各呼び出しはfrob()
、その「移動」バージョンを効果的に呼び出します。これはコンパイル時に判断できるものなので、なんらかの形で存在しない理由は考えられません。
私はこのようなものを書くことができます:
that &&frob(that &&t)
{
return t;
}
その結果、次のようになります。
frob(frob(frob(that())));
これは読むのがやや面倒で、委任で「物事を綴る」という私の目標を達成していません。