Psaní vlastních manipulátorů bez argumentů
Psaní manipulators, které nepoužívají argumenty vyžaduje odvození třídy ani používání složitých maker.Předpokládejme, že vaše tiskárna vyžaduje pár <ESC>[do režimu tučným písmem.Tento pár můžete vložit přímo do proudu:
cout << "regular " << '\033' << '[' << "boldface" << endl;
Nebo můžete definovat bold manipulator, který vloží znaky:
ostream& bold( ostream& os ) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
Globálně definovaných bold funkce přijímá ostream argument a vrátí odkaz ostream odkaz.Není členskou funkci nebo přítele protože nepotřebuje přístup k jakékoli soukromé třídy prvků.bold Funkce připojí k datovému proudu, protože proudu << operátor přetížené přijmout tento druh funkce, pomocí prohlášení, která vypadá podobně jako následující:
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
Tuto funkci můžete použít k rozšíření dalších přetížených operátorů.V tomto případě je náhodné, bold vkládá znaky do datového proudu.Funkce je volána, když je vložen do datového proudu, nemusí při tisku sousedících znaků.Tisk může tedy dojít ke zpoždění, kvůli ukládání do vyrovnávací paměti datového proudu.