のような関数があるとしましょう
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);
}