My C++コンパイラはC++ 14
です。私はすべての種類のエラーコードをカプセル化するカスタムクラスのオブジェクトを取り込む関数を持っています。このパラメータは参照渡しされます。カスタムクラスオブジェクトには、有効なエラー値&が空になることがあります。私はC++ 14ですてきな新しいものを見つけました。それはstd::experimental::optionalです。今私は実際にoptional
パラメータであるので、私は自分のパラメータにこれを使用しようとしています。続きリファレンスでパラメータとしてstd :: experimental :: optionalを使用する
はSTDと私の関数のシグネチャである::私が使用しようとしていますという実験::オプション:
MyFunction(some param, std::experimental::optional<MyCustomErrorClass> & error_code) {
//some logic
//sometimes error_code is populated & sometimes not populated
}
以下は、どのように私はMyFunction
を呼び出しています:
MyCustomErrorClass error_code_object;
MyFunction(some_param, error_code_object);
次のコンパイラエラーが表示されます。
error: non-const lvalue reference to type 'std::experimental::optional< MyCustomErrorClass>' cannot bind to a value of unrelated type 'MyCustomErrorClass' MyFunction(some_param, error_code_object);
これを多く検索しました。 std::experimental::optional
またはstd::optional
の使用例のほとんどは、それを関数の戻り値として示しています。
私のstd :: experimental :: optionalの使い方は何ですか?
_Why_は、非const参照によって渡された 'error_code'ですか?純粋に入力パラメータの場合は、他のパラメータと同様にconst-refを渡します。 – ildjarn
C++ 14は標準です。コンパイラを記述する際には、その名前、バージョン番号、プラットフォームを使用してください。 –
@LightnessRacesinOrbit申し訳ありません。私のコードはclang、gcc、およびmicrosoft windowsでコンパイルされています。すべて3です。 –