私は、入力引数として文字列、さまざまなタイプの3つの出力引数(少なくともそれがアイデアです)、および区切り文字であるcharを受け取る関数を作成しようとしています。
入力文字列は指定された文字で区切られ、関数は各文字で終了するフィールドを各出力引数に順番に割り当てます(現時点では、などの入力文字列を処理"a;bb;ccc"
し、3つの出力引数のみに制限されていますが、それは問題)。
たとえば、I'd getなどの入力を10;200;3000
使用し、1番目、2番目、3番目の出力引数をそれぞれ使用します。10
200
3000
出力引数は文字列型または整数型である必要がありますが、C ++(および特にジェネリックプログラミング)に関する知識が限られているため、それを気にしないジェネリック関数を作成するのに問題があります。
私は次のコードを持っています:
template <typename T>
void parse_string (std::string &input, T &out1, T &out2, T &out3, const char delimiter)
{
while (out3 == "")
{
std::string temp = input.substr(0, input.find(delimiter));
input = input.substr(input.find(delimiter) +1);
if (out1 == "") { out1 = temp;}
else if (out2 == "") { out2 = temp;}
else { out3 = temp;}
}
}
文字列に対しては正常に機能しますが、整数に対しては明らかに機能しません。
引数が空かどうかをチェックする部分が間違っているのではないかと思います(他の部分についてはわかりません)。
私がそれを改善するのを手伝ってくれませんか?
また、ロジック自体を改善するためのアイデアを歓迎します(おそらく、引数の数を柔軟にするために可変個引数テンプレートを使用する必要がありますが、C++11標準がわかった)。
理想的には、まったく同じ関数を2回使用しているが、タイプごとに異なるシグネチャ(1つは文字列用、もう1つはint用)を使用している状況を避けたいと思います。
よろしくお願いします!