2

ユーザー定義オブジェクトからbool値を取得しようとしています。たとえば、floatまたはintを使用すると、次のようなことができます。

float a = 3.5
if (a) doSomething();

クラスを次のようにしたいと思います。

class Socket {
...
...
};
...
Socket T;

if (!T) cout << "Error occured";
else {
   doStuff();
}

もちろん、boolを返す関数(bool isValid();など)を定義して直接呼び出すこともできますが、それが可能かどうかを知りたいと思います。

4

1 に答える 1

2

C ++ 11では、タイプをブール値に安全に変換できます。

explicit operator bool() const {return isValid();}

コンパイラがそれをサポートしていない場合は、;なしで同じことを書くことができます。explicitただし、任意の数値タイプへの暗黙的な変換が可能になるため、少し危険な場合があります。代わりに、安全なブールイディオムとして知られるハックを使用できます。

private:
    typedef void (Socket::*safe_bool)() const;
    void safe_true() const {}
public:
    operator safe_bool() const {return isValid() ? &Socket::safe_true : 0;}

これは、。以外には変換できないポインタ型を返しますbool

于 2012-07-06T16:03:58.940 に答える