看书时看不懂
Cform 2005-05-16 02:05:04 21.4.6.1带参数的操控符
cout<< setprecision(4)<<angle,要不用4位angle为完成此事setprecison必须
返回一个用4初始化过的对象。在它被子调用时就能去调用cout。precision(4)。
这样的操控符是一个函数对象,它们被子<<(而不是通过()调用),
这个函数对象有可能象下历这样定义。
struct smanip{
ios_base& (*f)(ios_base&,int),int);//要调用的函数
int i,
smanip (ios_bse& (*ff)(ios_base&,int),(int)):f(ff),i(ii){}
};
template<class Ch, class Tr>
ostream<Ch,Tr> & operator<<(ostream<Ch,Tr>&os,const smanip& m)
{
return m.f(os,m.i);
}
smanip 的构造函数将存在于f和i中,operator<<调用f(i),现在我们就可以用
以下方式定义setprecision()了,
ios_base& set_precision(ios_base& s,int n)//协会助函数
{return s.precision(n);//调用成员函数}
inline smanip setprecison(int n)
{return smanip(set_precison,n)//创建函数对象
我们现在就可以写cout<<setprecison(4)<<angle了。
我不太明白当setprecison(4)被调用时,4传给了smanip中的构造函数,
可是,不知道是怎么传给了(*ff)(ios_base&,int)里的int??
另外,是不是调用smanip时,这会从非const转为const?