Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeładowanie operatora ->*

Ostatnio zmodyfikowano 2018-11-12 09:58
Autor Wiadomość
ParseThisCode
Temat założony przez niniejszego użytkownika
Przeładowanie operatora ->*
» 2018-11-12 09:32:25
C/C++
template < class T > class Pointer {
    T * vptr;
   
public:
    Pointer()
        : vptr( new T )
    { }
    Pointer( T & ref )
        : vptr( & ref )
    { }
   
    T & operator ->() {
        return vptr;
    }
};

class Test {
public:
    void foo() { }
};

int main() {
    Pointer < Test > p;
    void( Test::* fn )();
    fn = & Test::foo;
   
    ( p->* fn )();
}

error: no match for 'operator->*' (operand types are 'Pointer<Test>' and 'void (Test::*)()')
  (p->*fn)();
   ~^~~~~
P-172840
jankowalski25
» 2018-11-12 09:58:46
Komunikat błędu powinien być dość jasny: nie masz nigdzie zdefiniowanego takiego operatora.

C/C++
T & operator ->() {
    return vptr;
}
1. To nie jest
operator ->*()
.
2. Brakuje argumentu typu
void( Test::* )()
.
P-172841
« 1 »
  Strona 1 z 1