sscanfを使ってファイルからデータを読み込む関数の型を増やすためにtemplateにした際に,
- 警告が出てしまうこと
- フォーマット指定子をif文で切り替えないといけないこと
に困っています.なにかC++で良い解決方法はないでしょうか.
具体的には以下のようなスペース区切りのテキストファイルがあり,:
text
11 1.00 22 1.25 33 1.50 45 1.75
これを以下のようにした場合にsscanfの読み込み部分を全パターン実装しないといけないのと,ifで入らなかった場合のsscanfも,コンパイラが型がわからないのと警告を出してくるので製品として問題になってしまうということに困っています.
template<typename T, typename U> input_data(char* filename, T* number, U* value){ //..中略ファイル読み込みなど.. if(typeid(T)==typeid(long) && typeid(U) == typeid(float)){ sscanf(buffer, "%ld %f", number[i], value[i]); } else if(typeid(T)==typeid(int) && typeid(U) == typeid(double)){ sscanf(buffer, "%d %lf", number[i], value[i]); } else if.... //全種類実装しないといけない.略// }
streamで読み込んでもatoiなどで型を変換してあげないといけないですし,sscanfだと上記の問題があります.なにかいい方法はないでしょうか.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/18 16:35