在 Stroustrup 的 C++ 书中,有一个自定义操纵器采用参数的示例(请参阅附件代码)。我对如何创建结构感到困惑。特别是,“smanip”的构造函数看起来有两个 int 参数,一个用于函数指针“ff”,一个用于“ii”。我不明白如何传递 int 参数以使用以下方法创建结构:
cout << setprecision(4) << angle;
此外,这些函数的调用顺序是什么,类型参数 Ch 和 Tr 是如何确定的?非常感谢。
// manipulator taking arguments
struct smanip{
iso_base& (*f) (ios_base&, int);
int i;
smanip(ios_base& (*ff)(ios_base&, int), int ii) : f(ff), i(ii){}
};
template<cladd Ch, class Tr>
ostream<Ch, Tr>& operator<<(ostream<Ch, Tr>& os, smanip& m){
return m.f(os, m.i);
}
ios_base& set_precision(ios_base& s, int n){
return s.setprecision(n); // call the member function
}
inline smanip setprecision(int n){
return smanip(set_precision,n);
}
// usage:
cout << setprecision(4) << angle;