Stroustrup'un C++ kitabında, bir argüman alarak özel bir manipülatörün bir örneği vardır (lütfen ekli koda bakın). Yapının nasıl oluşturulduğu konusunda kafam karıştı. Özellikle, "smanip" in yapıcısı için, "ff" işlev işaretçisi için biri diğeri "ii" için bir tane olmak üzere iki int argumanı var gibi görünüyor. AyrıcaArgümanlar ile akış manipülatörleri nasıl çalışır?
cout << setprecision(4) << angle;
, bu işlevler denilen olsun düzen nedir ve nasıl tip argümanları Ch ve Tr belirlenir: Ben int argümanı kullanarak yapısını oluşturmak geçirilir anlamıyorum? Çok teşekkürler.
// 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;
o kodda herhangi bir "işlev nesne" Gerçekten yok:
Yani çizgi çevirir. Çok benzer isimlerle ilgili üç işlev vardır: "set_precision", "setprecision" ve "ios_base :: setprecision".Eğer dikkat etmiyorsanız, onları karıştırmak kolaydır. –