class Testable {
public:
void operator()() const {
...
}
};
に相当
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
ですか?
class Testable {
public:
void operator()() const {
...
}
};
に相当
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
ですか?
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
…暗黙的な変換を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と同等のコードです。 ”、いいえ、そうではありません。
私は知っている、このテクニックは何ですか?私は別の質問をしました! –
@IvanKush:ハァッか。 –
@IvanKush:私は答えを詳述しました。それは今より明らかか、それとも別の質問でこれについて何か尋ねたことを意味しましたか? –
クローズアップ投票者:この質問については不明な点は何ですか?無知から投票しないでください。 –