Boost実装によって作成された素晴らしいトリックを見てきました。彼らはどういうわけか、()演算子のオーバーロードを使用して、クラスboost :: system::error_codeのインスタンスをbool値に評価します。
class error_code
{
...
typedef void (*unspecified_bool_type)();
static void unspecified_bool_true() {}
operator unspecified_bool_type() const // true if error
{
return m_val == 0 ? 0 : unspecified_bool_true;
}
...
}
これにより、次のようなエラーをチェックできるようになります。
...
boost::system::error_code err
some_boost_func(err);
if(err)
{
//handle error
}
....
だから私は自分自身に尋ね続けます..そこで何が起こったのですか?これはどういうわけか関数ポインタの使用に関連しているようです...これを呼び出すとerr
、関数自体または関数ポインタが評価されますか?しかし、関数はどのようvoid (*unspecified_bool_type)();
にして値を返すことができますか
return m_val == 0 ? 0 : unspecified_bool_true;