Oracle® Solaris Studio 12.4: C++ ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

13.7.1 引数なしのマニピュレータの使用法

引数なしのマニピュレータは、次の動作を実行する関数です。

  • ストリームの参照引数を受け取ります。

  • そのストリームに何らかの処理を行います。

  • その引数を返します。

iostream では、このような関数へのポインタを使用するシフト演算子がすでに定義されているので、関数を入出力演算子のシーケンスの中に入れることができます。シフト演算子は、値の入出力を行う代わりに、その関数を呼び出します。tabostream に挿入する tab マニピュレータの例を次に示します。

ostream& tab(ostream& os) {
             return os <<’\t’;
            }
...
cout << x << tab << y;

この例は、次のコードを得るための複雑な方法です。

const char tab = ’\t’;
...
cout << x << tab << y;

次に示すのは別の例で、定数を使用してこれと同じことを簡単に実行することはできません。入力ストリームに対して、空白の読み飛ばしのオン、オフを設定すると仮定します。ios::setfios::unsetf を別々に呼び出して、skipws フラグをオンまたはオフに設定することもできますが、次の例のように 2 つのマニピュレータを定義して設定することもできます。

#include <iostream.h>
#include <iomanip.h>
istream& skipon(istream &is) {
       is.setf(ios::skipws, ios::skipws);
       return is;
}
istream& skipoff(istream& is) {
       is.unsetf(ios::skipws);
       return is;
}
...
int main ()
{
      int x,y;
      cin >> skipon >> x >> skipoff >> y;
      return 1;
}