初期化リストで例外をキャッチする方法について質問があります。
たとえば、Barから派生したクラスFooがあります
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
初期化リストで例外をキャッチする方法について質問があります。
たとえば、Barから派生したクラスFooがあります
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
構文は次のようになります(呼び出し元でそのようなものをキャッチする方が良いですが、キャッチしたらどうしますか?)
Bar::Bar()
try
: Foo(1)
{
}
catch( const SomeException &e )
{
}
C ++にはそのためのメカニズムがありますが、使用されることはめったにありません。これは関数tryブロックです。
Bar::Bar()
try
: Foo(1)
{
}
catch( Something )
{
}
この古典的なgotwを参照してください。これは、例外の変換にのみ使用する必要がある理由の概要を示しています(たとえば、例外タイプFooExceptionはBarExceptionになります)。
これは、オブジェクトを作成するプロシージャによってキャッチされる必要があると思います。
面倒なインスタンスを。に置き換えることを検討してくださいboost::optional
。次に、その初期化をコンストラクターの本体に延期できます。