/*--------------------------------------------------------------------------* * * Microsoft Windows * Copyright (C) Microsoft Corporation, 1992 - 1999 * * File: stlstuff.h * * Contents: Interface file for STL helpers * * History: 26-Apr-99 jeffro Created * *--------------------------------------------------------------------------*/ #ifndef STLSTUFF_H #define STLSTUFF_H #pragma once /*+-------------------------------------------------------------------------* * const member function adapters * * These member function adapters are used to adapt const member functions * in the same way that * * std::mem_fun * std::mem_fun1 * std::mem_fun_ref * std::mem_fun_ref1 * * adapt non-const member functions. *--------------------------------------------------------------------------*/ // TEMPLATE CLASS const_mem_fun_t template class const_mem_fun_t : public std::unary_function<_Ty *, _R> { public: explicit const_mem_fun_t(_R (_Ty::*_Pm)() const) : _Ptr(_Pm) {} _R operator()(_Ty *_P) {return ((_P->*_Ptr)()); } private: _R (_Ty::*_Ptr)() const; }; // TEMPLATE FUNCTION const_mem_fun template inline const_mem_fun_t<_R, _Ty> const_mem_fun(_R (_Ty::*_Pm)() const) {return (const_mem_fun_t<_R, _Ty>(_Pm)); } // TEMPLATE CLASS const_mem_fun1_t template class const_mem_fun1_t : public std::binary_function<_Ty *, _A, _R> { public: explicit const_mem_fun1_t(_R (_Ty::*_Pm)(_A) const) : _Ptr(_Pm) {} _R operator()(_Ty *_P, _A _Arg) {return ((_P->*_Ptr)(_Arg)); } private: _R (_Ty::*_Ptr)(_A) const; }; // TEMPLATE FUNCTION const_mem_fun1 template inline const_mem_fun1_t<_R, _Ty, _A> const_mem_fun1(_R (_Ty::*_Pm)(_A) const) {return (const_mem_fun1_t<_R, _Ty, _A>(_Pm)); } // TEMPLATE CLASS const_mem_fun_ref_t template class const_mem_fun_ref_t : public std::unary_function<_Ty *, _R> { public: explicit const_mem_fun_ref_t(_R (_Ty::*_Pm)() const) : _Ptr(_Pm) {} _R operator()(_Ty& _X) {return ((_X.*_Ptr)()); } private: _R (_Ty::*_Ptr)() const; }; // TEMPLATE FUNCTION const_mem_fun_ref template inline const_mem_fun_ref_t<_R, _Ty> const_mem_fun_ref(_R (_Ty::*_Pm)() const) {return (const_mem_fun_ref_t<_R, _Ty>(_Pm)); } // TEMPLATE CLASS const_mem_fun1_ref_t template class const_mem_fun1_ref_t : public std::binary_function<_Ty *, _A, _R> { public: explicit const_mem_fun1_ref_t(_R (_Ty::*_Pm)(_A) const) : _Ptr(_Pm) {} _R operator()(_Ty& _X, _A _Arg) {return ((_X.*_Ptr)(_Arg)); } private: _R (_Ty::*_Ptr)(_A) const; }; // TEMPLATE FUNCTION const_mem_fun1_ref template inline const_mem_fun1_ref_t<_R, _Ty, _A> const_mem_fun1_ref(_R (_Ty::*_Pm)(_A) const) {return (const_mem_fun1_ref_t<_R, _Ty, _A>(_Pm)); } #endif /* STLSTUFF_H */