2016-12-18 11 views
-3

私は、ファイルのデータを構造体のベクトルに読み込む必要があると言う人がいたら助けてくれることを願っていますが、readfile関数を使って別の構造体異なる時に。ファイルのデータを構造体のベクトルに読み込む必要があります

for(temp; getline(infile, temp.whatever) && getline(infile, temp.whatever2); i++) 
    structname.pushback(temp); 

これは機能を個々の構造体に結びつけています。他の関数を書いて別の構造体を読み込むことは生産的ではありません。明らかにこれは機能しますが、これをより再利用可能にする方法があります。事前に感謝します

+1

「temp」とは何ですか?それはタイプを持っていないようです...私はどこに宣言されていますか? –

+0

残念なことにtempは構造体の一時名で、iはループint i = 0の前に宣言されています。 –

+0

[MCVE]を提供してください –

答えて

0

はい、さまざまな構造型にコードを使用できるようにすることができます。

ただし、すべての構造体型は、関数内で使用されるフィールドを持つ必要があります。

それはこのようなものになります:両方myStructAmyStructBがメンバーwhateverwhatever2を持っている必要がありますので、ここで

template<typename T> 
void readData(vector<T>& v, istream& infile) 
{ 
    T temp; 
    while(getline(infile, temp.whatever) && getline(infile, temp.whatever2)) 
    { 
     v.push_back(temp); 
    } 
} 

int main() { 
    // Add code for infileA and infileB 

    vector<myStructA> va; 
    readData(va, infileA); // or readData<myStructA>(va, infileA); if you prefer 

    vector<myStructB> vb; 
    readData(vb, infileB); // or readData<myStructB>(vb, infileB); if you prefer 

    .... 
    .... 

    return 0; 
} 

を。これは、myStructAmyStructBの共通基本クラスを使用することで実装できます。

関連する問題