| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Наследование и STL |
| Автор: bel_nikita 8.1.2004, 12:38 |
| Возможно ли наследовать STL классы хотелась бы следующая конструкция: template <typename T> class cSTLQueue: public std::queue { public: ... protected: .... private: .... }; А вообще-то мне надо queue, но с фиксным колвом элементов и чтоб память выделялась сразу на конкретное число элементов. Хочу применить resize к queue, но надо как-то добраться до protected. Выходит нужно использовать наслкдование, но возможно ли такое? |
| Автор: Hroft 8.1.2004, 13:36 | ||
А что, так разве не работает?
А resize в нем нету.... |
| Автор: a-petrosian 8.1.2004, 13:50 |
| В общем наследование STL контейнеров не самый лучший вариант. Если ты не находишь другого выхода из сложивщейся ситуации, то проблема может быть гараздо глубже, а именно в проектных решениях. Подумай, что значит "очередь с фиксированным количестеом элементов"? ? ? Очередь - это структура данных в которую элементы добавляются и удаляются последователно ! Может быть тебе нужен vector<> или может нужно создать класс инкапсулирующий работу с queue<>. |
| Автор: bel_nikita 8.1.2004, 14:52 | ||
to a-petrosian
я не правильно выразился, не количество элементов, а количество ячеек элементов т.е. память под очередь должна выделяться при инициализации, а заполнение элементами по ходу программы Hroft я тож типа того пытался сделать, но ругается (MVC6++), типа посылает на доку к компилятору |
| Автор: Hroft 8.1.2004, 15:23 |
| Интересно, я тоже под VCPP6.0 это компилировал. Но можно так сделать: у вектора vector<> есть функция reserve, которая выделяет память, но при этом push_back будет работать, как будто она не выделялась. То есть не будет выделяться память под каждый элемент отдельно (или же под группу элементов, так как на самом деле оно не по одному выделяется, а штук по 10 по умолчанию, вроде бы). |
| Автор: bel_nikita 8.1.2004, 15:29 |
| Hroft спасибо! я уже пошел по другому пути а может проблема в typename? у тебя используется class Хотя это вроде бы тоже самое, но мне кажется есть какие-то отличия между typename & class жаль времени нет толком разобраться |