Я могу выбирать между указателями функций и объектами подкласса. Чтобы было ясно, скажите, что я должен уведомить какой-то объект о каком-либо действии (например, таймер); обратитесь к следующим двум вариантам (очень базовый код для демонстрационных целей):C++ Указатели функций против подклассов
Version 1
typedef void TimerCallback(void *args);
class Timer{
public:
Timer();
~Timer();
void schedule(TimerCallback *callback, void *args, long timeout)=0;
void cancel();
};
Версию 2
class TimerTask{
public:
TimerTask();
virtual ~TimerTask();
void timedout()=0;
};
class Timer{
public:
Timer();
virtual ~Timer();
void schedule(TimerTask *callback, long timeout)=0;
void cancel();
};
который один путь стандарта C++ и какой из них эффективен? Пожалуйста, дайте мне знать, если у вас есть другие предложения в этом отношении.
Пожалуйста, дайте мне знать, если я не понимаю в этом отношении.
Благодаря
Google «шаблон наблюдателя». –
'TimerTask' по сути является интерфейсом, и он часто используется в таких сценариях. С другой стороны, использование указателя функции дает дополнительную гибкость, поскольку вы можете обернуть что-либо в функцию/функтор. Кроме того, с интерфейсом вам обычно придется позаботиться об удалении объекта (если вы не используете интеллектуальные указатели), который вам не нужен с указателями fn. –
Ваш вопрос не имеет ни одного ответа ... это зависит от желаемого стиля. Но в целом вы должны взглянуть на разные предложения. – fen