5

operator member_function_pointer_type()typedefs を使用せずに (つまり、メンバー関数ポインターの型をインラインで指定して)を作成することは可能ですか?

たとえば、Safe Bool イディオムを実装する場合:

class Foo
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;
};

bool_type演算子を宣言するときに、型を直接書き出すことはできますか? もしそうなら、どのように?

4

1 に答える 1

1

これは、 aoperatorを使用せずにa (型キャスト) を宣言できない唯一のケースのようtypedefです。

それが別の関数または別のであった場合、正常operator xに動作します。

class Foo 
{
    typedef void (Foo::*bool_type)() const;
public:
    operator bool_type() const;

// other syntax
    void (Foo::* some_func () const) () const;  // ok! named function
    void (Foo::* operator * () const) () const;  // ok! operator *
    void (Foo::* operator () const) () const;  // error! typecasting operator
};

デモ

于 2013-06-16T05:22:49.693 に答える