My-library.info
Все категории

Михаил Гусаров - Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Михаил Гусаров - Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса. Жанр: Программирование издательство неизвестно, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса
Издательство:
неизвестно
ISBN:
нет данных
Год:
неизвестен
Дата добавления:
17 сентябрь 2019
Количество просмотров:
117
Читать онлайн
Михаил Гусаров - Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

Михаил Гусаров - Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса краткое содержание

Михаил Гусаров - Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса - описание и краткое содержание, автор Михаил Гусаров, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info

Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса читать онлайн бесплатно

Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса - читать книгу онлайн бесплатно, автор Михаил Гусаров
Назад 1 2 Вперед

template<class R>

struct gen_mem_fun_traits {

 template<class T>

 struct signature {

  typedef gen_mem_fun_base_t<R, T> base;

 };

};


template<> struct gen_mem_fun_traits<void> {

 template<class T> struct signature {

  typedef void_gen_mem_fun_base_t<T> base;

 };

};


Этот класс специализирован для специального случая функции, возвращающей void. Таким образом, хоть нам и придется ввести дополнительный класс для функций, возвращающих void, для клиента это будет выглядеть единообразно: gen_mem_fun_traits<rettype>::signature<memberclass>::base.

Сами по себе ветви вычислений различных вариантов тривиальны:

template<class R, class T>

struct gen_mem_fun_base_t {

protected:

 gen_mem_fun_base_t(R (T::*pm_)()): pm(pm_) {}

public:

 template<class TT> R operator()(TT p) {return (p.operator->()->*pm)();}

 template<> R operator()(T* p) {return (p->*pm)();}

private:

 R (T::*pm)();

};


template<class T>

struct void_gen_mem_fun_base_t {

protected:

 void_gen_mem_fun_base_t(void (T::*pm_)()): pm(pm_) {}

public:

 template<class TT> void operator()(TT p) {(p.operator->()->*pm)();}

 template<> void operator()(T* p) {(p->*pm)();}

private:

 void (T::*pm)();

};

Теперь определим сам gen_mem_fun_t:

template<class R, class T>

struct gen_mem_fun_t: gen_mem_fun_traits<R>::template signature<T>::base {

 typedef gen_mem_fun_traits<R>::template signature<T>::base base_;

 explicit gen_mem_fun_t(R (T::*pm_)()): base_(pm_) {}

};


Один момент здесь требует пояснения: typedef используется для того, чтобы компилятор понял, какому предку нужно передать в конструктор наш указатель на функцию-член.

И, наконец, gen_mem_fun вообще остался без изменений:

template<class R, class T>

gen_mem_fun_t<R, T> gen_mem_fun(R (T::*pm)()) {

 return gen_mem_fun_t<R, T>(pm);

}

Заключение

Надеюсь, читатель понял, что создание адаптера как такового не было основной целью этой статьи, тем более что гораздо более общий вариант такого адаптера под названием bind находится в библиотеке boost. Основная задача, которая стояла передо мной, была такова: дать читателю некоторые навыки и умения, позволяющие не пасовать перед необходимостью внести какие-либо дополнения или изменения в STL, а также познакомить с некоторыми приемами, специфичными для C++ и полезными при необходимости работать с компиляторами, не вполне поддерживающими стандарты.

Я благодарю Павла Кузнецова и Андрея Тарасевича за плодотворную дискуссию в форуме, непосредственно предшествовавшую написанию этой статьи и давшую мне некоторые приемы и идеи, которые были освещены выше.


Назад 1 2 Вперед

Михаил Гусаров читать все книги автора по порядку

Михаил Гусаров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса отзывы

Отзывы читателей о книге Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса, автор: Михаил Гусаров. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.