|
|
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Нужно передать в качестве параметра одному из методов класс указатель на метод другого класса. Подскажите, пожалуйста, как это сделать. Почему следующий пример не работает? typedef void (*PF) (); class A { public: void f(); }; class B { public: void f1(PF p) { } void f2() { } }; void main() { A a; B b; b.f1(&a.f()); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 11:38 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Что-то типа такого Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 11:44 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Такой способ не очень подходит в данном случае. Попробую переформулировать вопрос. Есть некоторый класс, который может обнаружить некоторое событие (например, приём данных). typedef void (READ_EVENT) (char); class Communication { public: void StartService() private: READ_EVENT _readEvent; }; Есть другой класс, который должен обрабатывать это событие. class DataProcessing { public: void ReadDataEvent(char byte);//Обработчик передачи данных события private: Communication *_pCommunication; } Вопрос заключается в том, как указатели из класса Communication передать адрес метода ReadDataEvent. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 14:31 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Это? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:25 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Может быть в моём случае проще использовать паттерн Observer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:47 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Может быть в моём случае проще использовать паттерн Observer? Может. Не знаком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 15:51 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Похоже приведённый пример тоже решает мою задачу. Только мне он кажется достаточно сложным. Мне кажется, что в моём примере проще всего использовать паттер Observer. Класс, который должен сообщить о событии, будет хранить список объектов Observer, с достаточно простым интерфейсом. Что-то вроде: class Communication { public: Attache(Observer o); Detache(Observer); void NotifyAboutReadByte(char byte) { //Для всех объектов Observer o->ReadByteEvent(byte); } }; class Observer { virtual void ReadByteEvent(char byte) {} }; Класс, которые будет обрабатывать события класса Communication будет переопределять методв класса Observer. Нельзя ли привести пример реализованного таким образом делегата? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:01 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
по-видимому, делегат тебе не нужен. Делегат – более мощное средство обработки событий, он позволяет вызывать не только предопределённый метод (void Observer::ReadByteEvent(char)), а любой метод с такой же сигнатурой. Обычный интерфейс и полегче и попонятнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34324302&tid=2029467]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
213ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 555ms |

| 0 / 0 |
