另一种mem_fun_ref
2012-03-15 14:01
447 查看
标准mem_fun_ref只能将数据交给类自己来处理,而不能由其它类来处理。下面这个mem_fun_ref可以将数据交给其它的类来处理.
// TEMPLATE CLASS mem_fun_ref_t
template<class _Result,
class _container,
class _Ty>
class mem_fun_ref_t
: public std::binary_function<_container,_Ty, _Result>
{ // functor adapter (*left.*pfunc)(), non-const *pfunc
public:
explicit mem_fun_ref_t(_container& c,_Result (_container::*_Pm)(_Ty&))
: _Pmemfun(_Pm),_c(c)
{ // construct from pointer
}
_Result operator()(_Ty& _Param) //const
{ // call function
return ((_c.*_Pmemfun)(_Param));
}
private:
_Result (_container::*_Pmemfun)(_Ty &); // the member function pointer
_container& _c;
};
template<class _Result,
class _Container,
class _Ty> inline
mem_fun_ref_t<_Result, _Container,_Ty> mem_fun_ref(_Container& _c,_Result (_Container::*_Pm)(_Ty&))
{ // return a mem_fun_ref_t functor adapter
return (mem_fun_ref_t<_Result,_Container, _Ty>(_c,_Pm));
}
class Int
{
public:
explicit Int(int i):m_i(i){}
void print1()
{}
private:
int m_i;
};
class aaaa
{
public:
aaaa(){};
~aaaa(){};
void test(Int& i)
{
};
};
void ttt()
{
aaaa bb;
int a[]={1,2,3,4,5,6};
std::vector<Int> va;
va.push_back(Int(1));
for_each(va.begin(),va.end(),mem_fun_ref<void,aaaa,Int>(bb,&aaaa::test));
}
// TEMPLATE CLASS mem_fun_ref_t
template<class _Result,
class _container,
class _Ty>
class mem_fun_ref_t
: public std::binary_function<_container,_Ty, _Result>
{ // functor adapter (*left.*pfunc)(), non-const *pfunc
public:
explicit mem_fun_ref_t(_container& c,_Result (_container::*_Pm)(_Ty&))
: _Pmemfun(_Pm),_c(c)
{ // construct from pointer
}
_Result operator()(_Ty& _Param) //const
{ // call function
return ((_c.*_Pmemfun)(_Param));
}
private:
_Result (_container::*_Pmemfun)(_Ty &); // the member function pointer
_container& _c;
};
template<class _Result,
class _Container,
class _Ty> inline
mem_fun_ref_t<_Result, _Container,_Ty> mem_fun_ref(_Container& _c,_Result (_Container::*_Pm)(_Ty&))
{ // return a mem_fun_ref_t functor adapter
return (mem_fun_ref_t<_Result,_Container, _Ty>(_c,_Pm));
}
class Int
{
public:
explicit Int(int i):m_i(i){}
void print1()
{}
private:
int m_i;
};
class aaaa
{
public:
aaaa(){};
~aaaa(){};
void test(Int& i)
{
};
};
void ttt()
{
aaaa bb;
int a[]={1,2,3,4,5,6};
std::vector<Int> va;
va.push_back(Int(1));
for_each(va.begin(),va.end(),mem_fun_ref<void,aaaa,Int>(bb,&aaaa::test));
}
相关文章推荐
- STL中mem_fun和mem_fun_ref的用法
- STL中mem_fun和mem_fun_ref的用法
- C++ mem_fun 和 mem_fun_ref 的用法
- STL中mem_fun和mem_fun_ref的用法
- STL中mem_fun和mem_fun_ref的用法
- Effective STL 41 Understand the reasons for ptr_fun, mem_fun, and mem_fun_ref
- C++ mem_fun 和 mem_fun_ref 的用法
- mem_fun_ref,mem_fun,not1,not2,ptr_fun
- STL中mem_fun和mem_fun_ref的用法
- mem_fun_ref,mem_fun
- ptr_fun,mem_fun,mem_fun_ref的使用
- 【STL】函数 for_each; bind1st和bind2nd,not1; mem_fun和mem_fun_ref;
- effective stl 第41条:理解ptr_fun/mem_fun/mem_fun_ref的由来
- STL中mem_fun和mem_fun_ref的用法
- C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
- 了解使用ptr_fun、mem_fun和mem_fun_ref的原因1(Effective stl 条款41)
- STL中mem_fun和mem_fun_ref的用法
- bind1st, bind2nd, mem_fun, mem_fun_ref,这三个函数的使用
- 从零开始学C++之STL(九):函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
- 了解使用ptr_fun、mem_fun和mem_fun_ref的原因2(Effective stl 条款41)