Независимо от "использования обратных вызовов в C ++ для повышения связи" или нет, я предлагаю использовать стиль обработчика событий, особенно для обработки событий, подобных событиям. Например, конкретизируйте шаблон проектирования вместо концепции обратного вызова, как показано ниже:
class MyClass
{
public:
virtual bool OnClick(...) = 0;
virtual bool OnKey(...) = 0;
virtual bool OnTimer(...) = 0;
virtual bool OnSorting(...) = 0
...
};
Вы все еще можете считать вышеупомянутые функции обратными вызовами, но, рассматривая их как известный шаблон проектирования, вы не запутаетесь, потому что выполняете OO и пишете C ++.
Effo UPD @ 2009nov13 -
Типичные случаи: Framework, Система событий или Модель параллельного программирования и т. Д. Следующие примеры должны быть полезны.
Framework контролирует весь процесс, как гласит Голливудский принцип: «Не звоните нам, мы вам позвоним». (это именно то, что означает «обратный вызов»), в то время как для обычной функции или lib, вызывающая сторона контролирует поток.
Хорошо известной средой C является ядро Linux, и писатель драйвера Linux знает, что он / она реализует в нем «struct file_operations», «read ()» означает OnRead (), а «write ()» означает OnWrite ( ) и т. д.
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
...
};
Но самый простой пример фреймворка должен быть:
The Framework | A developer to do
----------------------------+--------------------------------------
| class MyClass : public Actor
| {
| public:
pApplication->Init(...); | virtual bool OnInit(...) {}
pApplication->Run(...); | virtual int OnRun(...) {}
pApplication->Quit(...); | virtual void OnQuit(...) {}
| ...
| };
и pApplication-> Init () вызовут pActor-> OnInit, а pApplication-> Run () вызовет pActor-> OnRun () и т. Д. Внутри. Большинство разработчиков графических интерфейсов Windows испытали реализацию OnMouseClick () или OnButtonPress () и т. Д.
Я согласен с другими ответами этого потока, что они дают правильное объяснение на основе соответствующей точки зрения, например, обработчики в многоуровневом подходе, обобщенный обратный вызов или асинхронные операции и так далее. Вам решать, какие идеи подойдут для вас.