Обобщение mem_fun
Обобщение mem_fun
Проблемы с интерфейсом mem_fun_t
Для начала обратим внимание на то, что mem_fun_t::operator() принимает только указатель на объект класса, чьим членом является функция pm. От этого было бы неплохо избавиться. Рассмотрим такой вариант:
template<class TT, class R, class T>
struct gen_mem_fun_t {
explicit gen_mem_fun_t(R (T::*pm)());
R operator()(TT p);
};
Сразу видна пара недостатков – во-первых, теперь адаптер может работать только с одним типом обобщенных указателей, а во-вторых, этот тип придется задавать при создании адаптера. Эти соображения должны натолкнуть нас на мысль воспользоваться шаблонными функциями-членами классов.
template<class R, class T>
struct gen_mem_fun_t {
explicit gen_mem_fun_t(R (T::*pm)());
template<class TT> R operator()(TT p);
};
Теперь все хорошо – при необходимости вызвать operator() для специфичного обобщенного указателя сгенерируется своя функция operator().
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
24.4.7 Обобщение
24.4.7 Обобщение Мы рассмотрели некоторые конкретные примеры, чтобы познакомится с основной структурой безопасности. В целом можно использовать обычный набор механизмов для защиты пересылаемого трафика:? Между хостами? Между маршрутизаторами? Между хостом и
Глава 6. ОБОБЩЕНИЕ ДАННЫХ С ПОМОЩЬЮ АГРЕГАТНЫХ ФУНКЦИЙ
Глава 6. ОБОБЩЕНИЕ ДАННЫХ С ПОМОЩЬЮ АГРЕГАТНЫХ ФУНКЦИЙ В ЭТОЙ ГЛАВЕ, ВЫ ПЕРЕЙДЕТЕ ОТ ПРОСТОГО использования запросов к извлечению значений из базы данных и определению, как вы можете использовать эти значения чтобы получить из них информацию. Это делается с помощью
Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref
Совет 41. Разберитесь, для чего нужны ptr_fun, mem_fun и mem_fun_ref Загадочные функции ptr_fun/mem_fun/mem_fun_ref часто вызывают недоумение. В одних случаях их присутствие обязательно, в других они не нужны... но что же они все-таки делают? На первый взгляд кажется, что они бессмысленно
8.2.2. Обобщение
8.2.2. Обобщение Часто бывает полезно обобщить исходную задачу таким образом, чтобы полученная более общая задача допускала рекурсивную формулировку. Исходная задача решается, тогда как частный случай ее более общего варианта. Обобщение отношения обычно требует введения
Горизонтальное и вертикальное обобщение типа
Горизонтальное и вертикальное обобщение типа Рис. 10.1. Размерности обобщенияУже изученные механизмы позволяют написать класс, помещенный в центр рисунка - LIST_OF_BOOKS, экземпляр которого представляет список книг. У класса следующие компоненты: put для вставки элемента, remove