2016-07-19 6 views
0

は、このようなコードこの演算子にエイリアシングがありますか?私は<code>typedef void (Testable::*bool_type)() const;</code> が<code>operator</code></p> <p>に適用する意味があるのか​​理解していない

class Testable { 

public: 

    void operator()() const { 
    ... 
    } 
}; 

に相当

class Testable { 
    typedef void (Testable::*bool_type)() const; 

public: 

    operator bool_type() const { 
    ... 
    } 
}; 

ですか?

+0

クローズアップ投票者:この質問については不明な点は何ですか?無知から投票しないでください。 –

答えて

2
class Testable { 
    typedef void (Testable::*bool_type)() const; 

public: 

    operator bool_type() const { 
    ... 
    } 
}; 

&hellip;暗黙的な変換をbool_typeに定義しています。これは、メンバータイプへのアクセス不可能なポインタです。

これは、意図しない暗黙の変換、特に関数呼び出しのオーバーロード解決を回避しながら、暗黙的な変換をboolに提供するC++ 03の手法です。返されたメンバポインタは、boolに変換されますが、関数の引数として使用される可能性のある型には変換されません。対照的に、純粋なbool結果は、例えば、 intおよびvoid*結果は、used by C++03 iostreamsとしてvoid*の仮引数と一致します。 C++ 11以降あなたの代わりにこのように、explicitを使用すると

:名前の変換関数を定義し、

explicit operator bool() const { return whatever; } 

でも良く、例えば

auto is_empty() const -> bool { return whatever; } 

これは、一般的にC++ 03でもよくなりました。 :-)


については、“は&hellipと同等のコードです。 ”、いいえ、そうではありません。

+0

私は知っている、このテクニックは何ですか?私は別の質問をしました! –

+0

@IvanKush:ハァッか。 –

+0

@IvanKush:私は答えを詳述しました。それは今より明らかか、それとも別の質問でこれについて何か尋ねたことを意味しましたか? –

関連する問題