クラスの安全な bool イディオムを実装するために (Boost.Operators から)を活用しようとしてboost::bool_testable<>
いますが、ライブラリの最新バージョン (この記事の時点で 1.49) にはもうないようです。
それはどこに行きましたか?現在利用可能なより良い代替手段はありますか?
私は C++11 を使用できないため、安全な bool を不要にする言語拡張機能を使用できません。
クラスの安全な bool イディオムを実装するために (Boost.Operators から)を活用しようとしてboost::bool_testable<>
いますが、ライブラリの最新バージョン (この記事の時点で 1.49) にはもうないようです。
それはどこに行きましたか?現在利用可能なより良い代替手段はありますか?
私は C++11 を使用できないため、安全な bool を不要にする言語拡張機能を使用できません。
回答が遅くなりましたが、私はスタック オーバーフローを短時間しか利用していないので、あなたの質問を見つけました。私は Boost.Operators のメンテナーであり、誤ってリリースされる前に 2003 年 12 月に削除しました。 bool_testable
Sam Partington が数週間前にそれを提案し、私はそれを CVS リポジトリに追加しました。最初は有望に見えましたが、すぐに特定のシナリオで問題が発生しました。
から派生したクラスの主な問題である IIRC は、変換の検出に関係していました。に変換可能で に変換できないクラスは、 を生成する必要がありますが、代わりにあいまいになり、コンパイルに失敗しました。T
boost::bool_testable<T>
bool
int
boost::is_convertible<T,int>::value == false
他にも問題があり、そのうちの 1 つを解決すると、通常は別の問題が発生することを意味していました。1 つの例は、ユーザーが明示的な変換を必要とする型bool
と、自分のoperator int()
.
つまり、簡単に言えば、十分に堅牢にする方法がわかりませんでした。疑わしい場合は、潜在的な問題と比較して利点が小さすぎる (安全な ~ 5 行のコピー アンド ペースト コード) ため、安全にプレイすることにしたため、削除しました。
それが削除された後、問題が再び発生することはなく、人々は最終的に Safe-Bool-Idiom コードをコピーしてクラスに貼り付けるか、(しばらくして)explicit operator bool()
利用可能になったときに使用し始めました。
とはいえ、行を手動でコピーするのが最善です。私はそれがエレガントな解決策ではないことを知っていますし、コピー&ペーストも好きではありませんが、代替手段はすべてそれよりも悪いものでした.