Форум программистов, компьютерный форум CyberForum.ru

Не тривиальное использование шаблонов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработана библиотека функций API для MetaTrader 4 http://www.cyberforum.ru/cpp-beginners/thread502447.html
Уважаемые господа трейдеры и программисты! Нами разработана DLL библиотека + советник для MT4, которые решают все проблемы API MetaTrader 4. Теперь все возможности MT4 (котировки, открытие и закрытие позиций, история торговли и т.д.) доступны из разработанных Вами программ. Все подробности на нашем сайте http://www.min2006.ru
C++ Как в Borland C++ к проекту подключить lib библиотеку? Как в Borland C++ к проекту подключить lib библиотеку? http://www.cyberforum.ru/cpp-beginners/thread502422.html
SendMessage в обход Subclassing'а C++
Столкнулся с проблемкой. Есть корявая корпоративная бд с убогим интерфейсом. Нужно фильтровать в SysTreeView32 элементы. Написал код на VBA для грабливания списка SysListView32 другого процесса, Writeprocessmemory и все такое. При тестировании на WinRar мой код работает. Из VBA выбирает элементы по фильтру. Но с корпоративной прогой не работает, просто игнорирует все посланные SysListView32...
C++ С какими библиотеками .lib или .dll програмы работают быстрее?
С какими библиотеками .lib или .dll програмы работают быстрее? и почему?
C++ Настройка библиотек pcre-6.4-1-lib http://www.cyberforum.ru/cpp-beginners/thread502331.html
скачал pcre-6.4-1-lib что делать дальше? Куда копировать файлы из етой библиотеки? Как настроить?
C++ С++ и регулярные выражения С++ и регулярные выражения - возможно ли ето? Какие есть библиотеки или что-то в етом роде? подробнее

Показать сообщение отдельно
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
24.04.2012, 02:37     Не тривиальное использование шаблонов
Вектор - это шаблон, который принимает в качестве параметра тип или класс объектов, экземпляры которых он будет хранить. Если вы планируете хранить данные любого типа, включая примитывные типы (int, long, char, bool, etc.) то, на мой взгляд, единственный способ это реализовать - это создать вектор указателей на любой тип (void *).

В этом случае, правда, возникнут трудности определения типа хранимого объекта в режиме Run-Time при его извлечении из вектора. Поэтому в указанном вами форуме вам уже рекомендовали обернуть примитивные типы и объекты других классов, классом, который может "подсказать" тип текущего объекта (у которого есть метод приведения к примитивным типам или есть метод GetType() и пр.).

Данная техника является классическим подходом для примитивных типов данных, который носит английское название: boxing/unboxing, и широко применяется в Java и .NET

Другое дело, если вам не требуется хранить абсолютно любые типы, а лишь все объекты конкретной иерархии классов. Например, вы хотите создать вектор графических объектов для их отрисовки на экране. Объекты следующих классов: CCircle, CSquare, CTriangle, CLine, CDot, CRectangle, etc. Тут уже на помощь приходят основные механизмы ООП. Очевидно, что имеет смысл создать базовый класс, скажем CGraphObject, у которого определить виртуальную абстрактную функцию void Draw(). Все выше перечисленные классы должны наследовать класс CGraphObject и реализовать метод Draw() в соответствии со своей спецификой.

Нетрудно догадаться, что в данном случае разумнее всего создать вектор, хранящий объекты типа CGraphObject: vector<CGraphObject> m_arr; Дальнейшее использование - пробегать по вектору и вызывать метод Draw(). Благодаря замечательной идее полиморфизма, программа в режиме Run-Time самостоятельно примет решение, какую конкретную реализацию функции Draw применять к тому или иному объекту.

Удачи,
Владимир

P.S. не думаю, что рассказал что-то новое, но раз уж вы спросили, решил еще раз повторить основные идеи шаблонов и ООП.
 
Текущее время: 23:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru