単純な文字列分割に使用する一般的なコードは次のようになります。
inline std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
誰かが、これは で発生するエラーを黙って「飲み込む」と述べましたstd::getline
。そしてもちろん、私はそうであることに同意します。しかし、実際にここで何がうまくいかない可能性があるのか 、心配する必要があることに気づきました。基本的には、すべてこれに要約されます。
inline std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
if(/* what error can I catch here? */) {
// *** How did we get here!? ***
}
return elems;
}
Astringstream
は によってサポートされているstring
ため、ファイルからの読み取りに関連する問題について心配する必要はありません。getline
行区切りまたはEOF
. boost::lexical_cast
そのため、何かが心配しなければならないようなエラーを取得することはできません。
問題が発生する可能性のある十分なメモリの割り当てに失敗する以外に、何かを考えることはできませんが、イベントが発生するstd::bad_alloc
前に問題が発生するだけstd::getline
です。私は何が欠けていますか?