私はクラスを返すことを意味する関数を持っているとしましょう。しかし、コンストラクタを呼び出すときに例外処理を使いたいと思います。問題は、ある例外の場合には、私は返すように望んでいたクラスは範囲外であると私は返すことは何もない:例外処理を持つ関数のクラスを返す
myclass GetClass() {
try {
myclass classtoreturn(7);
return classtoreturn;
} catch (const std::exception& ex) {
//
} catch (const std::string& str) {
//
} catch (...) {
//
}
return ??;
}
しかし、私はのtry/catchの外でクラスを宣言した場合、私は返すように初期化されていないクラスの問題を持っているつもり:
myclass GetClass() {
myclass classtoreturn;
try {
classtoreturn(7);
return classtoreturn;
} catch (const std::exception& ex) {
//
} catch (const std::string& str) {
//
} catch (...) {
//
}
return classtoreturn; //Unitialized!
}
私の最初のinstictではなくポインタを返すと、例外が発生した場合にNULLポインタを返すようにしたが、その後ポインタが指しされるだろうスコープ外のクラスで、これはまだ良くありません。このようなことはよくある問題ですが、私は解決策を見つけたわけではありません。
また、実際のアプリケーションはhereと表示されます。ここではgpsmmクラスをメイン関数に戻してポーリング関数へのポインタとして渡すことができます。
ありがとうございます!
OK、今私はしかし、私はこれは単に呼び出し側に問題をpropogatesだと思う、それは呼び出し側で例外をキャッチすることは理にかなって思っているいくつかの回答を読んで:私として
void main() {
try{
myclass classforuse{ GetClass() };
} catch (...) {
//
}
//Want to do something with "classforuse" but it's out of scope!
}
私が宣言するときにクラスが構築されることを理解しているので、try {}内からクラスを作成し、std/boost :: optionalを使用せずに同じtry {}の範囲外で使用する方法はありません。あれは正しいですか?私は同じtry {}の中からクラスを使用する実用的な手段が見つからない限り、boostライブラリは私の唯一の選択肢だと思う。ありがとう
'std :: optional'または' boost :: optional'を見てください。 – Holt