3

!演算子をオーバーロードしたクラスがあります。

class obj
{
public:

    bool operator!() const
    { return this->str.length() == 0; }

private:

    string str;

};

!演算子を使用して、有効性を確認したいのでobj、次のようにします。

obj o;

// if o is not a valid object
if(!o)
   cerr << "Error";

今、私はこれを行う可能性が欲しいです:

// if o is a valid object
if(o)
   cout << "OK";

どのようにできるのか?

4

2 に答える 2

6

C++11 を使用すると、以下を使用してこれを行うことができますexplicit operator bool

explicit operator bool() const {
    return !!*this;
}

boolこの演算子は、オブジェクトを明示的にキャストする必要がある場合に呼び出されます(ifステートメントによって自動的に行われます)。実装operator !は、受信側オブジェクトで your を呼び出し、反対の結果を返すことによって機能します。

お役に立てれば!

于 2012-06-29T17:47:32.567 に答える
1

使用状況に基づいて、boolオペレーターではなくオペレーターをオーバーロードする必要があるようです!

class obj
{
public:

    operator bool() const
    { return this->str.length() == 0; }

private:

    string str;

};

編集

ildjarn は、単純なboolオーバーロードを行うことの危険性について、コメントで素晴らしいリンクを提供してくれました。間違いなく一読の価値あり

http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool

于 2012-06-29T18:00:38.053 に答える