2

クラスの安全な bool イディオムを実装するために (Boost.Operators から)を活用しようとしてboost::bool_testable<>いますが、ライブラリの最新バージョン (この記事の時点で 1.49) にはもうないようです。

それはどこに行きましたか?現在利用可能なより良い代替手段はありますか?

私は C++11 を使用できないため、安全な bool を不要にする言語拡張機能を使用できません。

4

1 に答える 1

6

回答が遅くなりましたが、私はスタック オーバーフローを短時間しか利用していないので、あなたの質問を見つけました。私は Boost.Operators のメンテナーであり、誤ってリリースされる前に 2003 年 12 月に削除しました。 bool_testable

Sam Partington が数週間前にそれを提案し、私はそれを CVS リポジトリに追加しました。最初は有望に見えましたが、すぐに特定のシナリオで問題が発生しました。

から派生したクラスの主な問題である IIRC は、変換の検出に関係していました。に変換可能で に変換できないクラスは、 を生成する必要がありますが、代わりにあいまいになり、コンパイルに失敗しました。Tboost::bool_testable<T>boolintboost::is_convertible<T,int>::value == false

他にも問題があり、そのうちの 1 つを解決すると、通常は別の問題が発生することを意味していました。1 つの例は、ユーザーが明示的な変換を必要とする型bool 、自分のoperator int().

つまり、簡単に言えば、十分に堅牢にする方法がわかりませんでした。疑わしい場合は、潜在的な問題と比較して利点が小さすぎる (安全な ~ 5 行のコピー アンド ペースト コード) ため、安全にプレイすることにしたため、削除しました。

それが削除された後、問題が再び発生することはなく、人々は最終的に Safe-Bool-Idiom コードをコピーしてクラスに貼り付けるか、(しばらくして)explicit operator bool()利用可能になったときに使用し始めました。

とはいえ、行を手動でコピーするのが最善です。私はそれがエレガントな解決策ではないことを知っていますし、コピー&ペーストも好きではありませんが、代替手段はすべてそれよりも悪いものでした.

于 2013-03-27T00:07:12.637 に答える