Сообщений 14    Оценка 60 [+1/-0]         Оценить  
Система Orphus

ATLArray вместо CArray

Автор: Сергей Ермак

Класс ATLArray

Вместо введения

Библиотеки ATL и WTL от Microsoft, основанные на шаблонах, позволяют разрабатывать компактные и гибкие COM-приложения. В отличие от привычной библиотеки основных классов MFC, объем рабочего кода, а следовательно и быстродействие серверов и контейнеров, элементов управления ActiveX, написанных с использованием библиотек шаблонов, может быть уменьшен в несколько десятков раз.

Цена такой компактности и ускорения работы приложений - определенная сложность в изучении библиотек и необходимость написания, порой, значительного объема нетривиального кода. Являясь узкоспециализированными инструментами, ATL и WTL не имеют в своем составе многих полезных классов, к которым привыкли разработчики, использующие MFC.

Так как коллекции данных и объектов являются составной частью механизма автоматизации, который в свою очередь является одной из составляющих технологии COM, разработчики давно испытывают потребность в таком мощном классе, которым является класс CArray из MFC.

Написать эту заметку и предложить свой вариант удовлетворения потребности программистов меня побудил вопрос одного из них в конференции "Программирование" популярного и полезного, на мой взгляд, интернет-ресурса http://rsdn.ru.

Вместо документации

Собственно вступление, изложенное выше, заняло больше времени и сил, чем решение самой проблемы. Шаблон класса ATLArray, предлагаемый вашему вниманию, - практически полный аналог класса CArray из библиотеки MFC. Так что не ждите подробного описания его методов и переменных, - читайте хэлп по классу CArray в документации вашей Visual Studio и применяйте полученные знания к объектам, произведенным от класса ATLArray. Все методы, их параметры и возвращаемые значения, а также закрытые и открытые переменные класса полностью идентичны.

Оговорю лишь некоторые отличия.

  1. Т.к. большинство классов в MFC имеют на вершине иерархии CObject, то СArray содержит некоторое количество методов и кода для поддержки свойств объектов, помещаеммых в массив, обусловленных этой особенностью. Это касается работы конструкторов, деструкторов и методов серриализации элементов массива. Классы ATL и WTL не поддерживают CObject и не производятся от него, следовательно этот код и методы исключены из реализации ATLArray. К числу исключенных методов относятся: Все названные методы реализованы в CObject от MFC и не поддерживаются в ATL и WTL. Так что, если ваш проект сконфигурирован с поддержкой MFC и элементами вашего массива будут классы MFC или производные от них, то для хранения таких элементов лучше использовать традиционный CArray. Если же вам захочется реализовать некоторые из этих методов самостоятельно, своя рука - владыка.
  2. Т.к. проекты на базе ATL и WTL имеют более скромные средства отладки и тестирования, из класса ATL исключен метод Dump(), который также реализуется в MFC базовым классом CObject. При этом, как ни странно, метод AssertValid(), также наследуемый от CObject, сохранен и в классе ATLArray. Сохранена и возможность отладки и ловли "блох" с помощью широко используемого в ATL и WTL макроса ATLASSERT.

Вот и все отличия предлагаемого класса ATLArray от его старшего брата CArray.

Все остальное вы можете изучить и понять традиционным для ATL способом - просмотром кода прилагаемого файла Atlarray.h.

Там где вам потребуются переменные типа ATLArray, ссылки или указатели на них или классы производные от ATLArray используйте директиву

#include <atlarray.h>

Можно включить эту строку в файл StdAfx.h вашего проекта (файл этот автоматически генерируется визардом ATL), тогда описание класса станет доступным для всего проекта.

Вместо заключения

Скопируйте предлагаемый файл Atlarray.h в папку VC98\ATL\include. Всё.

Вместо прощания

Не прощаюсь. Писать можно на mi@bay.da.ru

Sergey Yermack (aka Mi)


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 14    Оценка 60 [+1/-0]         Оценить