Como os manipuladores de fluxo com argumentos funciona
o livro C ++ do Stroustrup, há um exemplo de um manipulador personalizado usando um argumento (veja o código em anexo). Estou confuso sobre como a estrutura é criada. Em particular, parece que existem dois argumentos int para o construtor de "smanip", um para o ponteiro de função "ff" e outro para "ii". Não entendo como o argumento int é passado para criar a estrutura usando:
cout << setprecision(4) << angle;
Além disso, qual é a ordem em que essas funções são chamadas e como os argumentos de tipo Ch e Tr são determinados? Muito obrigado
// 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;