Язык программирования C++ для профессионалов



         

Зависимости в рамках иерархии классов - часть 2


template<class T> class buffer { // ... void put(T); T get(); };

Если реакция на переполнение и обращение к пустому буферу, "запаяна" в сам класс, его применение будет ограничено. Но если функции put() и get() обращаются к виртуальным функциям overflow() и underflow() соответственно, то пользователь может, удовлетворяя своим нуждам, создать буфера различных типов:

template<class T> class buffer { //... virtual int overflow(T); virtual int underflow(); void put(T); // вызвать overflow(T), когда буфер полон T get(); // вызвать underflow(T), когда буфер пуст };

template<class T> class circular_buffer : public buffer<T> { //... int overflow(T); // перейти на начало буфера, если он полон int underflow(); };

template<class T> class expanding_buffer : public buffer<T> { //... int overflow(T); // увеличить размер буфера, если он полон int underflow(); };

Этот метод использовался в библиотеках потокового ввода-вывода (§10.5.3).




Содержание  Назад  Вперед