a
およびb
が組み込み型の変数である場合、それらをストリーミングするための独自のユーザー定義演算子を定義することはできません (標準ライブラリは既にそのような関数を提供しています) 。
必要な動作でコードを書き出すことができます...
int a, b;
char eq, gt;
// this is probably good enough, though it would accept e.g. "29 = > 37" too.
// disable whitespace skipping with <iomanip>'s std::noskipws if you care....
if (iFile >> a >> eq >> gt >> b && eq == '=' && gt == '>')
...
ORa
とb
を or にラップし、class
そのためstruct
のプロバイダー ユーザー定義演算子を指定します。そのようなストリーミング関数の書き方を説明する答えを含む SO の質問がたくさんあります。
またはサポート関数を書く...
#include <iomanip>
std::istream& skip_eq_gt(std::istream& is)
{
char eq, gt;
// save current state of skipws...
bool skipping = is.flags() & std::ios_base::skipws;
// putting noskipws between eq and gt means whatever the skipws state
// has been will still be honoured while seeking the first character - 'eq'
is >> eq >> std::noskipws >> gt;
// restore the earlier skipws setting...
if (skipping)
is.flags(is.flags() | std::ios_base::skipws);
// earlier ">>" operations may have set fail and/or eof, but check extra reasons to do so
if (eq != '=' || gt != '>')
is.setstate(std::ios_base::failbit)
return is;
}
...では、このように使用してください...
if (std::cin >> a >> skip_eq_gt >> b)
...use a and b...
ストリームは、ストリームの一部の側面 (たとえば、) を再構成する「io マニピュレーター」関数を受け入れるように設計されているため、この関数は「機能します」std::noskipws
が、関数を呼び出すには、(入力) io マニピュレーターのプロトタイプと一致する必要があります。 : std::istream& (std::istream&)
.