diff options
author | tema-m <tema-m@yandex-team.com> | 2023-10-02 16:20:43 +0300 |
---|---|---|
committer | tema-m <tema-m@yandex-team.com> | 2023-10-02 17:07:09 +0300 |
commit | 285ff2c13a1a598798c0cee110b6336f25249af1 (patch) | |
tree | d15e19bf28aba7280026f40e52dfcc5166d64468 /library/cpp | |
parent | 0691d47f35466e34709febd3581f49b708b223be (diff) | |
download | ydb-285ff2c13a1a598798c0cee110b6336f25249af1.tar.gz |
Fix: почему InsertTo и EmplaceTo ограничиваются определёнными контейнерами?
InsertTo -- столкнулся с проблемой, что я не могу им пользоваться, если мой THashSet имеет кастомный хэш. Решил эту проблемы более общим способом -- сделал так, что InsertTo принимает любой контенер, который может делать insert.
EmplaceTo -- почему-то умел работать только с TVector -- поэтому поддерживает тоже любой контейнер
UPD: поменял методы, чтобы они могли работать с любыми контейнерами, но в некотором коде кто-то зачем-то явно указывал тип T, поэтому мой код это ломал. Так что я просто добавил перегрузку
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/getopt/small/last_getopt_opt.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/library/cpp/getopt/small/last_getopt_opt.h b/library/cpp/getopt/small/last_getopt_opt.h index 2e6437b9db..625f4237dc 100644 --- a/library/cpp/getopt/small/last_getopt_opt.h +++ b/library/cpp/getopt/small/last_getopt_opt.h @@ -715,12 +715,24 @@ namespace NLastGetopt { return Handler1T<T>([target](auto&& value) { target->insert(std::forward<decltype(value)>(value)); }); } + // Appends FromString<T>(arg) to *target for each argument + template <class Container> + TOpt& InsertTo(Container* target) { + return Handler1T<typename Container::value_type>([target](auto&& value) { target->insert(std::forward<decltype(value)>(value)); }); + } + // Emplaces TString arg to *target for each argument template <typename T> TOpt& EmplaceTo(TVector<T>* target) { return Handler1T<TString>([target](TString arg) { target->emplace_back(std::move(arg)); } ); } + // Emplaces TString arg to *target for each argument + template <class Container> + TOpt& EmplaceTo(Container* target) { + return Handler1T<TString>([target](TString arg) { target->emplace_back(std::move(arg)); } ); + } + template <class Container> TOpt& SplitHandler(Container* target, const char delim) { return Handler(new NLastGetopt::TOptSplitHandler<Container>(target, delim)); |