Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование и STL 
:(
    Опции темы
bel_nikita
Дата 8.1.2004, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Возможно ли наследовать STL классыconfused.gif

хотелась бы следующая конструкция:

template <typename T>
class cSTLQueue: public std::queue
{
public:
...
protected:
....
private:
....
};

А вообще-то мне надо queue, но с фиксным колвом элементов и чтоб память выделялась сразу на конкретное число элементов.
Хочу применить resize к queue, но надо как-то добраться до protected. Выходит нужно использовать наслкдование, но возможно ли такое?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Hroft
Дата 8.1.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



А что, так разве не работает?
Код

#include <queue>
#include <iostream>

using namespace std;

template <class T>
class static_queue : public queue<T> {
private:
void my_resize() { this->push('A'); }
public:
static_queue() : queue<T>() {my_resize();}
};

int main(int argc, char* argv[])
{
static_queue<char> sq;
//sq.pop();
std::cout<<sq.empty();
return 0;
}

А resize в нем нету....
PM MAIL ICQ   Вверх
a-petrosian
Дата 8.1.2004, 13:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В общем наследование STL контейнеров не самый лучший вариант.

Если ты не находишь другого выхода из сложивщейся ситуации, то проблема может быть гараздо глубже, а именно в проектных решениях. Подумай, что значит "очередь с фиксированным количестеом элементов"? ? ? Очередь - это структура данных в которую элементы добавляются и удаляются последователно !

Может быть тебе нужен vector<> или может нужно создать класс инкапсулирующий работу с
queue<>.

  Вверх
bel_nikita
Дата 8.1.2004, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



to a-petrosian
Цитата
Подумай, что значит "очередь с фиксированным количестеом элементов"? ? ? Очередь - это структура данных в которую элементы добавляются и удаляются последователно !


я не правильно выразился, не количество элементов, а количество ячеек элементов
т.е. память под очередь должна выделяться при инициализации, а заполнение элементами по ходу программы

Hroft
я тож типа того пытался сделать, но ругается (MVC6++), типа посылает на доку к компилятору



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Hroft
Дата 8.1.2004, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: нет
Всего: 3



Интересно, я тоже под VCPP6.0 это компилировал.
Но можно так сделать: у вектора vector<> есть функция reserve, которая выделяет память, но при этом push_back будет работать, как будто она не выделялась. То есть не будет выделяться память под каждый элемент отдельно (или же под группу элементов, так как на самом деле оно не по одному выделяется, а штук по 10 по умолчанию, вроде бы).
PM MAIL ICQ   Вверх
bel_nikita
Дата 8.1.2004, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Hroft
спасибо!
я уже пошел по другому пути

а может проблема в typename? у тебя используется class
Хотя это вроде бы тоже самое, но мне кажется есть какие-то отличия между typename & class
жаль времени нет толком разобраться

Это сообщение отредактировал(а) bel_nikita - 8.1.2004, 15:30


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.