aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authortema-m <tema-m@yandex-team.com>2023-10-02 16:20:43 +0300
committertema-m <tema-m@yandex-team.com>2023-10-02 17:07:09 +0300
commit285ff2c13a1a598798c0cee110b6336f25249af1 (patch)
treed15e19bf28aba7280026f40e52dfcc5166d64468 /library/cpp
parent0691d47f35466e34709febd3581f49b708b223be (diff)
downloadydb-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.h12
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));