5

次のような呼び出しが失敗したときに、どのキーが関係していたかを知る方法はありますか?

boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();

キーがマップにない場合、または int に変換できない場合は、かなり情報に乏しい bad_any_cast が返され、次のいずれかを知ることができません。

  • 関係する鍵
  • 保存された値、またはそこにある場合でも。
  • 関与するタイプ

ブーストヘッダーを変更したり、上記へのすべての呼び出しを try..catch ブロックにラップしたりする必要のない解決策は見つかりません。これは一般的な問題だと思うので、他の誰かがより良いアプローチを知っているかもしれません。

4

1 に答える 1

3

マルコ、

ライブラリを変更せずに診断を改善する方法はありません。

ただし、一般的に、この場合の例外が非常に詳細であるとは思わないことに注意してください。 - 変数にアクセスするために間違った型を使用すると、コーディング エラーが発生します。デバッガーを使用して簡単に追跡できます。存在しない変数にアクセスする場合は、vm.count を使用するか、デフォルト値を使用する必要があります。繰り返しになりますが、これはおそらく、デバッガーを使用して解決するのが最適なコーディング エラーです。

bad_any_cast は改善できるものであることに同意しますが、例外がコーディングエラーの結果である場合、ユーザーに報告できる例外がここでの目標であるようには見えません。

于 2011-04-14T09:30:51.323 に答える