假设有一个类似的功能
void SendToTheWorld(const Foo& f);
我需要Foo
在发送之前预处理对象
X PreprocessFoo(const Foo& f)
{
if (something)
{
// create new object (very expensive).
return Foo();
}
// return original object (cannot be copied)
return f;
}
用法
Foo foo;
SendToTheWorld(PreprocessFoo(foo));
所以X PreprocessFoo()
函数应该能够返回原始对象或复制/修改而不是返回新对象。我不能返回const Foo&
,因为它可能引用一个临时对象。我也不喜欢Foo
在堆上创建。
完美,X
应该是 和 的某种联合const Foo&
,Foo
可以被视为const Foo&
. 知道如何以更优雅的方式做到这一点吗?
我目前的解决方案:
Foo PreprocessFoo(const Foo& f)
{
// create new object (very expensive).
return Foo();
}
用法:
Foo foo;
if (something)
{
SendToTheWorld(PreprocessFoo(foo));
}
else
{
SendToTheWorld(foo);
}