Argument funkcji jako adres metody innej klasy
Ostatnio zmodyfikowano 2016-12-04 00:00
fokusx Temat założony przez niniejszego użytkownika |
Argument funkcji jako adres metody innej klasy » 2016-12-03 21:16:50 Witam, Mam dane 2 klasy. Klasa A zawiera funkcję, która jako argument pobiera adres do funkcji i wygląda tak: class A { private: A() { } ~A() { } public: void MetodaKlasyA( void( * Draw )() ) { while( 1 ) { Draw(); } } };
Klasa B zawiera metodę Draw(), której adres chcę przesłać do MetodaKlasyA(): class B { private: B() { } public: void Draw() { } };
Wywołanie MetodaKlasyA(): void main() { A::Singleton().MetodaKlasyA( & B::Singleton().Draw ); }
Obiekty klas A i B to Singleton'y. W wyniku kompilacji otrzymuję błąd: '&': illegal operation on bound member function expression Jakieś rady? |
|
1aam2am1 |
» 2016-12-03 21:24:38 std::bind std::function |
|
pekfos |
» 2016-12-03 21:29:50 Adres metody to &Klasa::metoda, nie jakieś &cokolwiek().metoda. |
|
mokrowski |
» 2016-12-03 21:59:38 #include <iostream>
using namespace std;
template < class T > class Singleton { private: Singleton( const Singleton & ); Singleton & operator =( const Singleton & ); protected: Singleton() { } virtual ~Singleton() { } public: static T & getInstance() { static T _instance; return _instance; } };
class B : public Singleton < B > { protected: friend class Singleton < B >; private: B() { } public: void Draw() { cout << "Wywołanie metody Draw() z klasy B." << endl; } };
class A : public Singleton < A > { protected: friend class Singleton < A >; private: A() { } ~A() { } public: void MetodaKlasyA( void( B::* draw )() ) { while( 1 ) { ( B::getInstance().* draw )(); exit( 0 ); } } };
int main() { A::getInstance().MetodaKlasyA( & B::Draw ); }
|
|
fokusx Temat założony przez niniejszego użytkownika |
» 2016-12-04 00:00:52 Wyjaśnione, dzięki. |
|
« 1 » |