少し見ると分かることですが、int へ変換する関数はあるのに、unsigned int へ変換する関数は用意されていません。
int があるのだから、unsigned int も用意されていてもいいように思う所ですが、実は std::string を unsigned int へ変換する関数 stoui の実装は、std::stoul を使えばそれほど難しくはありません。
以下はその実装例です。
#include <iostream> #include <limits> #include <string> unsigned int stoui(const std::string& str, std::size_t* pos=0, int base=10) { try { unsigned long tmp = std::stoul(str, pos, base); // unsinged intの最大値をチェックする if (tmp > std::numeric_limits<unsigned int>::max()) { throw std::out_of_range("stoui"); } return tmp; } catch (const std::invalid_argument& e) { // std::stoulからの例外 throw std::invalid_argument("stoui"); } catch (const std::out_of_range& e) { // std::stoulからの例外 throw std::out_of_range("stoui"); } } int main(void) { unsigned int ui = stoui("123"); std::cout << ui; // => "123" try { ui = stoui("abc"); } catch (const std::invalid_argument& e) { std::cout << e.what(); // => "stoui" } try { ui = stoui("5000000000"); } catch (const std::out_of_range& e) { std::cout << e.what(); // => "stoui" } return 0; }
0 件のコメント:
コメントを投稿