クラスがありFoo
ます。Foo
const 以外のメソッドがいくつかあります。Foo
一時オブジェクトで const 以外のメソッドを呼び出しても問題ありません。Foo
メソッドがオブジェクト自体に何をするかよりも、メソッドが実際に返すものだけに興味があります。
最初の質問: これだけで、クラスFoo
が適切に設計されていないことを示す必要がありますか?
2 番目の質問: そのまま続行したいが、非 const メソッドを呼び出す関数への参照によってオブジェクトFoo
を渡すことができるようにしたい場合、それを行うための最良の方法は何でしょうか?Foo
これは私が到着したものです:
// The function that performs work on a Foo object.
int TakeFoo (Foo& FooBar) { ... }
// An overload just to accept temporary Foo objects.
int TakeFoo (Foo&& FooBar)
{
// Delegate
return TakeFoo(FooBar);
}
別のアプローチは、これを行うだけです:
int TakeFoo (const Foo& FooBar)
{
Foo& MyFooBar = const_cast<Foo&>(FooBar);
// Do work on MyFooBar
}
しかし、このアプローチには、実際に const と宣言されたオブジェクトの const を const-cast'ing している可能性があるという問題があり、未定義の動作の土地に陥る可能性があります。
編集:
TakeFoo を使用するコード例:
Foo GimmeFoo() { ... }
cout << TakeFoo(GimmeFoo()) << endl;
Foo ConstructedFoo(...);
cout << TakeFoo(ConstructedFoo) << endl;
// Continue to use ConstructedFoo