共用方式為


撰寫不含引數的操作工具

撰寫不使用自變數的操作工具既不需要類別衍生,也不需要使用複雜的巨集。 假設您的印表機需要 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 的。 函式會在插入數據流時呼叫,而不一定是在列印相鄰字元時呼叫。 因此,列印可能會因為資料流的緩衝區而延遲。

另請參閱

輸出資料流