Stroustrup の C++ ブックには、引数を取るカスタム マニピュレータの例があります (添付のコードを参照してください)。構造体の作成方法について混乱しています。特に、「smanip」のコンストラクターには 2 つの int 引数があるように見えます。1 つは関数ポインター「ff」用、もう 1 つは「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;