2

私の先生は、ifstream クラスとその仕組みを私たちに学んでほしかったのです。彼女は私たちに宿題を与え、FileStream ラッパー クラスを作成しました。このクラスは、あらゆるものを処理できるようにテンプレート化され、ファイル内のあらゆるものを取り込むことができます。

演算子の書き方がわからず>>、エラーが発生し続けるため、コンパイルできないことを除いて、すべてを書きました。これは私がこれまでに持っているものです:

template<class A>
ifstream& operator >>(FileStream<A> fs, A& x){
  fs>>x;
  return fs;
}

主に、彼女が私たちの仕事をチェックするために使用しているのは、次のように呼ばれます。

FileStream<Word> input;
Word temp; //word is a class we created to manipulate strings in certain ways 

while(input>> temp){
  cout<<temp<<endl;
}

誰かが私を助けることができれば、私はとても感謝しています. 私はこれに2日間取り組んでいますが、取得できません。

4

1 に答える 1

1
template<class T>
FileStream<T>& operator >> (FileStream<T>& fs, T& value) {
  value = fs.readValueFromStream();
  return fs;
}

メソッドは上記のようになります。ハイライト:

A(名前をTおよびxに変更したことに注意してくださいvalueTは一般的なテンプレート引数の通常の名前でありvalue、 よりも少し説明的ですx。)

  1. 参照を受け入れFileStream<T>&ます。を使用&すると、コピーではなく、元のストリーム オブジェクトを操作できます。
  2. FileStream<T>&ではなく参照を返しますifstream
  3. メソッド内で行うのではなく、fs>>x実際にストリームからアイテムを読み取り、それを に配置するコードを記述する必要がありますvalueFileStreamこれには、クラスのメソッドを使用する必要があります。と書きvalue = fs.readValueFromStream()ましたが、これはどうでもいいことです。

このようにoperator >>して、シンタックス シュガーとして機能します。実際の作業は、value = fs.readValueFromStream()行 (または実際にそこに記述したコード) によって行われます。

于 2012-11-16T00:24:37.210 に答える