应用器 & 操纵器

      操纵器(Manipalator),以某种方式作用于它的参数所表示的数据;应用器(Applicator),是一个重载操作符,它的操作数是一个可操纵的值和一个将作用于这个值得操纵器。

 template <class stype,class vtype >
class fcn_obj
{
public:
  fcn_obj(stype (f)(stype&,vtype),vtype v):
            func(f),val(v)
  {
  }
  stype& operator()(stype& s)const
  {
    return (
func)(s,val);
  }
private:
  stype& (*func)(stype&,vtype),vtype v);
  vtype val;
};

template <class stype,class vtype>
stype& operator<<
(stype& ofile,const fcn_obj<stype,vtype>& im)
{
   return im(ofile);
}

fun_obj<ostream long>
hexconv(long n)
{
   ostream (*my_hex)(ostream&,long)=hexconv;
   return fcn_obj<ostream,long>(my_hex,n);
}

 

上面的代码来自Ruminations On C++,iostream库中使用了这个设计,使得cout<<”Hello,World!”<<endl;用起来很舒服,终于知道了endl为什么叫做操纵器了。