問題タブ [safe-bool-idiom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2459 参照

c++ - ブーストで安全なブールイディオム?

ブースト ライブラリは安全な bool イディオムの実装を提供するので、そこからクラスを派生させることができますか?

はいの場合 - どこにありますか?

いいえの場合 - 自分で実装する以外の選択肢は何ですか?


次のような同様の質問を見つけました:「boost には安全な bool イディオム ヘルパーがありますか?」と受け入れられた回答は、 Boost.Operators での使用bool_testable<>示唆しています。

残念ながら、ブーストのマニュアルを確認したところ、そこには見つかりませんでした。それを使用するコードもコンパイルに失敗します。

また、別のSOの質問「Was boost::bool_testable<> relocated or removed?bool_testable 」に出くわしましたが、そこのコメントは、ブーストのどのリリースバージョンにも実際には作成されていないことを示唆しています。

私のプロジェクトにコピーアンドペーストできるコードを含む、このテーマに関するBjorn Karlsson による興味深い記事もあります。しかし、すでにそれを実装している、一般的に受け入れられ維持されているユーティリティ ライブラリ (boost など) があることを願っています。


互換性の理由から、C++11 には依存したくありません。

0 投票する
0 に答える
87 参照

c++ - safe-bool イディオムの単体テスト

C++ の safe-bool イディオムに必要なすべてのプロパティが含まれていることを保証するために、クラスを提出する必要がある単体テストはどれですか?

それらすべてに名前を付けようとすると ( The Safe Bool Idiomから抽出)、おそらく safe-bool イディオムを実装testするクラスのインスタンスについて、次の構成を有効にする必要があります。Test

  • if (test) { /* test is valid */ }
  • if (!test) { /* test is not valid */ }

...そして、次の構成要素を許可しません:

  • test << 1;
  • int i = test;
  • delete test;
  • if (test1 == test2) {}
  • if (test != test2) {}
0 投票する
4 に答える
3801 参照

c++ - C++ セーフ bool ラッパー

安全な bool idiomを適用するbool ラッパー構造体を設計しようとしています。 これを解決するための古典的な実装は非常に簡単です: スケルトンは次のようになります:

私が改善しようとしている部分は、どのようBoolに構築されているかです。
たとえば、設計による暗黙的な絞り込みを回避したい:

テンプレートを使用して自分を傷つけようとしましたが、成功しませんでした。

どうすればそれを機能させることができますか?