5

Czy jest możliwe utworzenie operator member_function_pointer_type() bez użycia typedefs (tj. Poprzez określenie typu wskaźnika funkcji członka w linii)?operator member_function_pointer_type() bez typedef?

Na przykład, podczas wdrażania Safe Bool Idiom:

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

możliwe jest pisać typ bool_type bezpośrednio podczas deklarowania operatora? Jeśli tak to jak?

Odpowiedz

1

Wygląda na to, że jest to jedyny przypadek, w którym nie można zadeklarować (typowania) wersji operator bez korzystania z typedef.

Gdyby była inna funkcja nazwa lub inny operator x, to działa dobrze:

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 
}; 

Demo.