我花了很多时间为我的班级实现移动语义,但现在我正在处理使用它的函数。
好的,所以我有这个对象,它在堆上有很多数据:CLargeOb
为此我实现了移动语义(构造函数和运算符 =)。理想情况下是这样使用的:
void OtherOb::Func(CLargeOb&& largeOb1, CLargeOb&& largeOb2)
{
SomeOtherFunc(largeOb1); // use objects
SomeOtherFunc(largeOb2);
m_largeOb1 = (CLargeOb&&)largeOb1; // save as members and trash the originals
m_largeOb2 = (CLargeOb&&)largeOb2;
}
但是,并不总是允许移动/丢弃对象,所以我添加了这两个函数:
void OtherOb::Func(const CLargeOb& largeOb1, CLargeOb&& largeOb2)
{
SomeOtherFunc(largeOb1);
SomeOtherFunc(largeOb2);
m_largeOb1 = largeOb1;
m_largeOb2 = (CLargeOb&&)largeOb2;
}
void OtherOb::Func(CLargeOb&& largeOb1, const CLargeOb& largeOb2)
{
SomeOtherFunc(largeOb1);
SomeOtherFunc(largeOb2);
m_largeOb1 = (CLargeOb&&)largeOb1;
m_largeOb2 = largeOb2;
}
尽管它有效,但您已经可以猜到,当我有一个将 3 个或更多这些对象作为参数的函数时,它会成为 *ss 的主要痛苦......没有使用模板解决这个问题的聪明方法吗? “完美转发”?