撰寫不含引數的操作工具
撰寫不使用自變數的操作工具既不需要類別衍生,也不需要使用複雜的巨集。 假設您的印表機需要 ESC[ 配對<>才能進入粗體模式。 您可以將這組直接插入資料流:
cout << "regular " << '\033' << '[' << "boldface" << endl;
或者,您可以定義 bold
操作工具來插入字元:
ostream& bold(ostream& os) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
全域定義的 bold
函式會接受 ostream
參考引數,並傳回 ostream
參考。 它不是成員函式或friend,因為它不需要存取任何私用類別元素。 bold
函式會使用如下的宣告來連接到資料流,因為已多載資料流的 <<
運算子來接受該類型的函式:
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
您可以使用此功能來擴充其他多載的運算子。 在此情況下,將字元插入數據流是偶然 bold
的。 函式會在插入數據流時呼叫,而不一定是在列印相鄰字元時呼叫。 因此,列印可能會因為資料流的緩衝區而延遲。