C ++ファイルを開いてクラスオブジェクトにデータを入力する
質問
簡単な質問、できれば簡単な方法で、正しく/効率的な方法で実行していることを確認したいだけです。
クラスTオブジェクトがあり、これは通常、main()関数で作成されたベクトルに入れられます。任意の種類のデータ、文字列、整数、浮動小数点数などを指定できます。ユーザーから入力され、関数に渡されるファイルから読み取り中です。ここに私の基本的な読み込み機能があります:
template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
ifstream myFile;
T object;
myFile.open("inputFile")
while(!myFile.eof())
{
myFile >> object;
insert(v, object, U)
}
}
insertは、データ構造を介してデータを挿入する別の関数です。うまく機能する場合に、これがそのデータを渡す最良の方法であることを確認したいだけです。
解決
それはうまくいくように見えますが、おそらくこれが最善の方法だと思います。しかし、なぜ自分でテストするのではなく、ここで尋ねるのですか?
他のヒント
あなたは、その状態でeofに対してテストするという古い間違いを犯しました。 EOFは、ファイルの終わりを超えて読み取ろうとするまで設定されません。したがって、このメソッドは、不要なベクトルに余分な値を1つ挿入します。
template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
ifstream myFile("inputFile"); // Why hard code this?
// When you pass inputFile as a parameter?
T object;
while(myFile >> object) // Get the object here.
// If it fails because of eof() or other
// It will not get inserted.
{
insert(v, object, U)
}
}
while
状態のストリームでは、 .eof()
を使用しないでください。条件は、ファイルの終わりを超えて読み込もうとした 後にのみtrueと評価されます。より良い方法は
while(myFile >> object)
insert(v, object, U);
U
の使用に欠陥があります。私はそれが何に使われるのか分かりません。 1回は型として使用されますが、もう1回は値として insert
関数に渡されます。
所属していません StackOverflow