私は、空白で区切られた単精度値をASCIIファイルの科学記法で読みました。 1行に複数の値があります。ストリームストリームを介してベクトルを生成します。できるだけ早くインプリメンテーション変換による文字列ストリームからの挿入
// Illustrates typical string from file
std::string string_with_floats("-2.750000e+001 2.750000e+001 3.450000e+001");
// Template parameter is the desired return type
vector<int> data = ReadValues<int>(string_with_floats);
template <class T>
vector<T>& ReadValues(std::string& string_with_data)
{
std::stringstream ss(string_with_data);
std::vector<T> values;
T val;
while(stream >> val)
{
values.push_back(val);
}
return values;
}
ベクターにおける結果上記の例では、-2に切り捨て、ちょうど最初の値が移入されたが、おそらくループが終了するので、:ベクトルのプリミティブ型は、データの種類と異なる場合があります数字以外の文字が遭遇する。テンプレートパラメータがfloatであっても、入ってくる文字列にint値が含まれていると、期待どおりに動作します。
暗黙の変換を実行して最も近い整数に丸めるためにstringstreamを設定する方法はありますか?元のプリミティブ型first(float)に挿入してTに明示的キャストを実行する必要はありますか?理想的には、ReadValuesにstring_with_dataのデータの型について伝える必要はありません。double、float、int、short、またはlongのいずれかであり、要求された型もこれらの型のいずれかになります。
ありがとうございました。
ありがとうございます。最後に提案するアプローチをテンプレートパラメータとして指定しました。私はCスタイルのキャストをstatic_cast(val)に置き換えました。 –
pdm2011