Допустим, есть такая функция, как
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);
}