|
Преобразование указываемого объекта в грань Итак, вы хотите получить грань по имеющемуся указываемому объекту. Для этого существует много способов, однако наиболее соответствующий стилю C++ заключается в использовании операторов преобразования. class View { public: operator ViewEvents() { return new ViewEvents(this); } operator ViewDrawing() { return new ViewDrawing(this); } }; Другой вариант - разрешить пользователю напрямую использовать конструкторы класса грани: ViewEvents ve(aView); Об их достоинствах и недостатках можно спорить долго, но лично я предпочитаю первый способ по причинам, о которых мы вскоре поговорим. Существует еще один способ, который тоже заслуживает упоминания - присвоить каждому типу грани уникальный идентификатор и затем создать единую, многоцелевую функцию генерации граней для всех классов. Такая функция получает идентификатор типа грани в качестве аргумента и возвращает грань, если она поддерживается объектом, и NULL - в противном случае. Те из вас, кому приходилось пользоваться технологиями СОМ и OLE компании Microsoft, узнают знакомую функцию QueryInterface, поддерживаемую всеми объектами. |
Copyright 2005. Климов Александр. All Right Reserved.