Быстрые делегаты C++ - Определение
ОГЛАВЛЕНИЕ
Страница 12 из 12
Определение
namespace fd
{
// ----------------------------------------------------------------------
class bad_function_call;
class bad_member_function_call;
// ======================================================================
//
// класс delegateN (переносимый синтаксис)
//
// ======================================================================
template < typename R,typename T1,typename T2,...,typename TN,
typename Alloocator = std::allocator < void > ,
size_t t_countof_pvoid = 2 >
class delegateN;
// ----------------------------------------------------------------------
// по умолчанию c'tor
delegateN< R, T1, T2, ..., TN >::delegateN();
// ----------------------------------------------------------------------
// копируем c'tor для 0
delegateN< R, T1, T2, ..., TN >::delegateN(implClass::clear_type const *);
// ----------------------------------------------------------------------
// копируем c'tor
delegateN< R, T1, T2, ..., TN >::delegateN(delegateN< R, T1,
T2, ..., TN > const & other);
// ----------------------------------------------------------------------
// функция копирует c'tor
delegateN< R, T1, T2, ..., TN >::delegateN(R (*fn)(T1, T2, ..., TN);
// ----------------------------------------------------------------------
// адаптер функции-члена копирует c'tors
// ,в которых T1 заведомо можно преобразовать в U * или U &
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T2, T3, ..., TN));
// ,в которых T1 заведомо можно преобразовать в один из
// U * или U const * или U & или U const &
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T2, T3, ..., TN) const);
// ----------------------------------------------------------------------
// связывание аргументов функции-члена копирует c'tors
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T1, T2, ..., TN), T & obj);
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T1, T2, ..., TN) const, T & obj);
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T1, T2, ..., TN), T * obj);
delegateN< R, T1, T2, ..., TN >::delegateN(R (U::*mfn)(T1, T2, ..., TN) const, T * obj);
// ----------------------------------------------------------------------
// функтор копирует c'tors
template< typename Functor >
delegateN< R, T1, T2, ..., TN >::delegateN(Functor & ftor, bool/* dummy*/);
template< typename Functor >
delegateN< R, T1, T2, ..., TN >::delegateN(Functor * ftor, bool/* dummy*/);
// ----------------------------------------------------------------------
// присваивание из 0
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (implClass::clear_type const *);
// ----------------------------------------------------------------------
// оператор присваивания
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator =
(delegateN< R, T1, T2, ..., TN > const & other);
// ----------------------------------------------------------------------
// оператор присваивания функции
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (*fn)(T1, T2, ..., TN);
// ----------------------------------------------------------------------
// операторы присваивания адаптера функции-члена
// ,в которых T1 можно заведомо преобразовать в U * или U &
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T2, ..., TN));
// ,где T1 можно заведомо преобразовать в один из U * или U const * или U & или U const &
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T2, ..., TN) const);
// ----------------------------------------------------------------------
// операторы присваивания связываемых аргументов функции-члена
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T1, T2, ..., TN), T & obj);
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T1, T2, ..., TN) const, T & obj);
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T1, T2, ..., TN), T * obj);
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator = (R (U::*mfn)(T1, T2, ..., TN) const, T * obj);
// ----------------------------------------------------------------------
// операторы присваивания функтора
template< typename Functor >
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator <<= (Functor & ftor);
template< typename Functor >
delegateN< R, T1, T2, ..., TN > &
delegateN< R, T1, T2, ..., TN >::operator <<= (Functor * ftor);
// ----------------------------------------------------------------------
// оператор вызова
result_type operator ()(T1 p1, T2 p2, ..., TN pN) const;
// ----------------------------------------------------------------------
// обмен местами
void delegateN< R, T1, T2, ..., TN >::swap(delegateN & other);
// ----------------------------------------------------------------------
// очистка
void delegateN< R, T1, T2, ..., TN >::clear();
// ----------------------------------------------------------------------
// очищение
bool delegateN< R, T1, T2, ..., TN >::empty() const;
// ----------------------------------------------------------------------
// сравнение с 0
bool operator == (implClass::clear_type const *) const;
bool operator != (implClass::clear_type const *) const;
// ----------------------------------------------------------------------
// сравнение
int compare(delegateN const & other, bool check_bound_object = false) const;
// операторы сравнения
bool operator == (delegateN< R, T1, T2, ..., TN > const & other) const;
bool operator != (delegateN< R, T1, T2, ..., TN > const & other) const;
bool operator <= (delegateN< R, T1, T2, ..., TN > const & other) const;
bool operator < (delegateN< R, T1, T2, ..., TN > const & other) const;
bool operator >= (delegateN< R, T1, T2, ..., TN > const & other) const;
bool operator > (delegateN< R, T1, T2, ..., TN > const & other) const;
// ======================================================================
// класс делегата (предпочтительный индекс)
// ======================================================================
template< typename R,typename T1,typename T2,...,typename TN,
typename Allocator = std::allocator< void >,size_t t_countof_pvoid = 2 >
class delegate< R (T1, T2, ..., TN), Allocator, t_countof_pvoid >;
//
// такой же набор членов-функций, что и для fd::delegateN в переносимом синтаксисе
//
// ======================================================================
// fd::make_delegate()
// ======================================================================
// make_delegate для функции
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
make_delegate(R (*fn)(T1, T2, ..., TN));
// ----------------------------------------------------------------------
// make_delegate для адаптера функции-члена
template< typename R,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T *, T2, ..., TN >
make_delegate(T *, R (U::*mfn)(T2, ..., TN));
template< typename R,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T *, T2, ..., TN >
make_delegate(T *, R (U::*mfn)(T2, ..., TN) const);
// ----------------------------------------------------------------------
// make_delegate для связанных аргументов функции-члена
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
make_delegate(R (U::*mfn)(T1, T2, ..., TN), T & obj);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
make_delegate(R (U::*mfn)(T1, T2, ..., TN) const, T & obj);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
make_delegate(R (U::*mfn)(T1, T2, ..., TN), T * obj);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
make_delegate(R (U::*mfn)(T1, T2, ..., TN) const, T * obj);
// ======================================================================
// fd::bind()
// ======================================================================
// связывание для связанных аргументов функции-члена
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
bind(R (U::*mfn)(T1, T2, ..., TN), T & obj, ...);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
bind(R (U::*mfn)(T1, T2, ..., TN) const, T & obj, ...);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
bind(R (U::*mfn)(T1, T2, ..., TN), T * obj, ...);
template< typename R,typename T1,typename T2,...,typename TN,typename U,typename T >
delegateN< R, T1, T2, ..., TN >
bind(R (U::*mfn)(T1, T2, ..., TN) const, T * obj, ...);
// ======================================================================
// fd::get_pointer()
// ======================================================================
template< typename T >
T * get_pointer(T * p);
template< typename T >
T * get_pointer(std::auto_ptr< T > & p);
// ----------------------------------------------------------------------
namespace util
{
// ======================================================================
// пользовательские распределители памяти (управляемый политиками)
// ======================================================================
// распределитель фиксированных блоков памяти
template< typename T >
class fixed_allocator;
// обычный распределитель памяти( эквивалентно std::allocator< T > )
template< typename T >
class std_allocator;
} // использование пространства имен
// ----------------------------------------------------------------------
} // пространство имен fd
Загрузить исходный код - 32.6 KB
Загрузить демо-проект (для VC6, VC71, и DEV-C++ 4.9.9.2) - 127 KB