diff options
author | evelkin <evelkin@yandex-team.com> | 2022-08-09 21:48:31 +0300 |
---|---|---|
committer | evelkin <evelkin@yandex-team.com> | 2022-08-09 21:48:31 +0300 |
commit | dd2db1bb6afc3705b308e83bef1a467ac38d4427 (patch) | |
tree | 08057116ec1ec06069c4ed0fdf0ffacfa76fe2e3 /util/string/cast.h | |
parent | f07e857ae1593c68375cdea3a2a9bdbdd164ccc8 (diff) | |
download | ydb-dd2db1bb6afc3705b308e83bef1a467ac38d4427.tar.gz |
Introduce TryFromString returning TMaybe
Позволяем писать без неиницилизированных переменных по месту использования.
Вот такую красоту например:
```
if (auto a = TryFromString<T>(str)) {
что-то делаем с \*a
}
```
Diffstat (limited to 'util/string/cast.h')
-rw-r--r-- | util/string/cast.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/util/string/cast.h b/util/string/cast.h index 90e925c194..3d94ecb0de 100644 --- a/util/string/cast.h +++ b/util/string/cast.h @@ -2,6 +2,7 @@ #include <util/system/defaults.h> #include <util/stream/str.h> +#include <util/generic/maybe.h> #include <util/generic/string.h> #include <util/generic/strbuf.h> #include <util/generic/typetraits.h> @@ -270,6 +271,36 @@ inline bool TryFromString(const TUtf16String& s, T& result) { return TryFromString<T>(s.data(), s.size(), result); } +template <class T, class TChar> +inline TMaybe<T> TryFromString(TBasicStringBuf<TChar> s) { + TMaybe<T> result{NMaybe::TInPlace{}}; + if (!TryFromString<T>(s, *result)) { + result.Clear(); + } + + return result; +} + +template <class T, class TChar> +inline TMaybe<T> TryFromString(const TChar* data) { + return TryFromString<T>(TBasicStringBuf<TChar>(data)); +} + +template <class T> +inline TMaybe<T> TryFromString(const TString& s) { + return TryFromString<T>(TStringBuf(s)); +} + +template <class T> +inline TMaybe<T> TryFromString(const std::string& s) { + return TryFromString<T>(TStringBuf(s)); +} + +template <class T> +inline TMaybe<T> TryFromString(const TUtf16String& s) { + return TryFromString<T>(TWtringBuf(s)); +} + template <class T, class TStringType> inline bool TryFromStringWithDefault(const TStringType& s, T& result, const T& def) { return TryFromString<T>(s.data(), s.size(), result, def); |