Я понятия не имею, почему существует stoi
, но не stou
, но единственная разница между stoul
и гипотетическим stou
заключается в проверке того, что результат находится в диапазоне unsigned
:
unsigned stou(std::string const & str, size_t * idx = 0, int base = 10) {
unsigned long result = std::stoul(str, idx, base);
if (result > std::numeric_limits<unsigned>::max()) {
throw std::out_of_range("stou");
}
return result;
}
(Аналогично, stoi
также похож на stol
, только с другой проверкой диапазона; но так как она уже существует, нет необходимости беспокоиться о том, как именно ее реализовать.)