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()
都会有效地调用&#34;移动&#34;其版本。由于这是可以在编译时确定的,我无法想到它以某种形式存在的任何理由。
我可以这样写:
that &&frob(that &&t)
{
return t;
}
哪会导致这个:
frob(frob(frob(that())));
阅读中有点烦人,并没有达到我的目标,即拼出东西&#34;与代表团合作。
答案 0 :(得分:2)
如果您希望&&
带注释的功能可以与其他人一起使用,则应该对其他功能使用&
注释。
that &frob() &
{
return *this;
}
that frob() const &
{
return that(*this);
}
答案 1 :(得分:0)
不,无法确定对象是否是对象内的右值。您可以做的最好的事情是复制它const
并移动它,如果不是:
that frob() const
{
return *this;
}
that frob()
{
return std::move(*this);
}
修改强>
进一步的研究显示你实际上是can,正如@Potatoswatter指出的那样,但是它被称为ref-qualification而不是注释。