Size: a a a

2020 October 02

CD

Constantine Drozdov in pro.cxx
Так что бакеты N элементов скушают N / load_factor * sizeof(T*) + allocator_overhead(N, sizeof(T))
Открытая адресация N элементов скушает N / load_factor * sizeof(T)
источник

CD

Constantine Drozdov in pro.cxx
В этом расчете получается, что для элементов, у которых sizeof(T) сильно больше sizeof(T*) надо бакеты
источник

CD

Constantine Drozdov in pro.cxx
тут не load_factor а какой-то параметр про пустые места, но это не меняет сути
источник

A

Arelav in pro.cxx
Кстати а почему hash_combine ну и сопутствующего до сих пор нет в стл? Есть какие то веские аргументы против?
источник

AT

Anatoly Tomilov in pro.cxx
модули сделают менее полезной`std::function`?
источник

N

Neargye in pro.cxx
Anatoly Tomilov
модули сделают менее полезной`std::function`?
Мне даже интересно, а как это связано?
источник

AZ

Alexander Zaitsev in pro.cxx
Arelav
Кстати а почему hash_combine ну и сопутствующего до сих пор нет в стл? Есть какие то веские аргументы против?
скорее похоже, что просто "зависло": https://github.com/cplusplus/papers/issues/253
источник

AT

Anatoly Tomilov in pro.cxx
Neargye
Мне даже интересно, а как это связано?
так, что реализация всегда будет видна (ну ладно, не "всегда" а почти всегда) и использовать void *, что прячется внутри std::function, не нужно будет. Можно будет писать template<typename F> void g(F && f) { ... f(); } вместо void g(std::function<void ()> f); + реализация где-то в другом месте.
источник

AT

Anatoly Tomilov in pro.cxx
или я что-то не так понимаю с этими модулями?
источник

O

Oleksandr in pro.cxx
Anatoly Tomilov
так, что реализация всегда будет видна (ну ладно, не "всегда" а почти всегда) и использовать void *, что прячется внутри std::function, не нужно будет. Можно будет писать template<typename F> void g(F && f) { ... f(); } вместо void g(std::function<void ()> f); + реализация где-то в другом месте.
Ну std::function еще нужен если вдруг тебе понадобится хранить функтор где-то со стиранием типов
источник

AT

Anatoly Tomilov in pro.cxx
Oleksandr
Ну std::function еще нужен если вдруг тебе понадобится хранить функтор где-то со стиранием типов
так есть std::variant, если всё на виду
источник

O

Oleksandr in pro.cxx
Anatoly Tomilov
так есть std::variant, если всё на виду
Эээ, а вариант тут причем? :)
источник

AT

Anatoly Tomilov in pro.cxx
Oleksandr
Эээ, а вариант тут причем? :)
вот вы мыслите в старой парадигме. В std::variant можно перечислить все типы (функциональных объектов и указателей на функцию). Они ж все видны
источник

O

Oleksandr in pro.cxx
Anatoly Tomilov
вот вы мыслите в старой парадигме. В std::variant можно перечислить все типы (функциональных объектов и указателей на функцию). Они ж все видны
Да, и как это связано с модулями и функторами?
источник

DS

David Sorokin in pro.cxx
std::function  - это такой боксинг для замыканий, когда замыкания по факту (полностью или частично - см. small size optimization) уходят из стека в кучу
источник

O

Oleksandr in pro.cxx
Ага, а что если у меня в качестве функтора лямбда, и ее тип мне неизвестен?
источник

m

magras in pro.cxx
Anatoly Tomilov
вот вы мыслите в старой парадигме. В std::variant можно перечислить все типы (функциональных объектов и указателей на функцию). Они ж все видны
Классический пример где используется std::funtion - callback. Его не заменить.
источник

O

Oleksandr in pro.cxx
magras
Классический пример где используется std::funtion - callback. Его не заменить.
Его как раз можно заменить на шаблонный аргумент. Если вынести реализацию функции в хедер.
источник

AT

Anatoly Tomilov in pro.cxx
magras
Классический пример где используется std::funtion - callback. Его не заменить.
я не про границы м/у so и dll — это как раз законный маргинальный случай, где std::function и прочие void * вполне себе законны
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
вот вы мыслите в старой парадигме. В std::variant можно перечислить все типы (функциональных объектов и указателей на функцию). Они ж все видны
а как в нём лямбду перечислить, простите?
источник