Lex Kravetski (lex_kravetski) wrote,
Lex Kravetski
lex_kravetski

Category:

 

 

Задача для C++ программеров. Решение ее мне в свое время доставило много интересных часов.

 

Требуется: механизм подписки, удовлетворяющий следующим условиям:

 

1.             Объект-подписчик не должен в обязательном порядке наследоваться от какого-либо класса.

2.             Объекту-нотификатору достаточно один раз унаследоваться от базового класса, чтобы реализовать произвольное число событий подписки.

3.             Подписка должна выполняться следующим образом: нотификатору при подписке передается идентификатор события и указатель на функцию, которую следует вызвать при происхождении события с этим идентификатором.

4.             Передаваемая функция является имеет произвольный тип параметра. Заранее он неизвестен. Объект-нотификатор должен быть реализован так, чтобы принимать при подписке указатель на любую функцию с любым параметром. Имя функции также может быть произвольным (то есть, в базовом объекте оно не должно быть жестко задано).

5.             При нотификации о событии, нотификатор (наследник базового объекта) передает также значение параметра функции. Возможен вызов функций с разными типами параметров при одном и тот же идентификаторе.

6.             Ни подписчик, ни нотификатор не должны использовать в явном виде преобразование типов. То есть, все преобразования должны быть сокрыты в базовом классе.

 

Задача имеет решение. Решение сложное. Но практика реализации просто бесценна – после решения этой задачи никаких проблем с шаблонами никогда больше не будет.

 

 

Subscribe

  • Вегетарианский парадокс

    Мне очень нравится занимательный парадокс, связанный с вегетарианством. Дело вот в чём. Вегетарианцы говорят, что люди очень зря убивают животных…

  • Лучше гор могут быть только нетронутые горы

    Почитав увлекательные дискуссии про то, как правильно иметь право задвинуть коней в горах, хотел бы сослаться на очевидное, которое почему-то не всем…

  • Бинарный культурный детерминизм

    Один из главнейших мета-вопросов, терзающих изрядную часть русскоговорящих: «почему до сих пор всё ещё не запрещены те штуки, которые кажутся мне и…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments