@ProCxx

Страница 2162 из 2477
Михаил
27.06.2018
08:14:30
Вот, сегодня буду это пробовать - спасибо!
Попробовал, стало получше, но особых изменений все равно не замечено. Ладно, всем спасибо, похоже я тут уже и так все что можно выжал ?.

Alexander
27.06.2018
09:07:04
https://colfaxresearch.com/compiler-comparison/

https://blogs.msdn.microsoft.com/vcblog/2018/06/26/convert-macros-to-constexpr/ https://blogs.msdn.microsoft.com/vcblog/2018/06/26/template-intellisense/

Vhäldemar
27.06.2018
11:31:49
std::map и end() безопасно ли его брать один раз и потом просто в цикле делать инсерт? auto iter = sources->end(); for (auto source : data) { sources->insert(iter, <some_data>); } ? или правильнее(и медленнее?) его апдейтить всегда

Google
Denis
27.06.2018
11:37:55
Итераторы не должны инвалидироваться, и end в том числе, я думаю

Хотя я не увидел, что вставка через итератор. В таком случае не знаю

Vhäldemar
27.06.2018
11:41:39
да

а что?

вам кажется, что """ Extends the container by inserting new elements, effectively increasing the container size by the number of elements inserted. Because element keys in a map are unique, the insertion operation checks whether each inserted element has a key equivalent to the one of an element already in the container, and if so, the element is not inserted, returning an iterator to this existing element (if the function returns a value). """ недостаточное описание?

Andrey
27.06.2018
11:43:28
а не проше ли sources.insert(std::begin(data), std::end(data));

или copy

Пишешь цикл - ты уже ошибся )

Vhäldemar
27.06.2018
11:44:20
нет, нужно конструировать на каждой итерации

Andrey
27.06.2018
11:44:31
тогда копи

Vhäldemar
27.06.2018
11:44:39
что копи?

Google
Aidar
27.06.2018
11:45:36
у end константная сложность есличо, почему он должен быть долгим?

Vhäldemar
27.06.2018
11:45:59
я про его инвалидацию

Andrey
27.06.2018
11:46:01
что копи?
я хотел сказать что тогда алгоритм

Vhäldemar
27.06.2018
11:46:02
после инсерта

Andrey
27.06.2018
11:46:08
какой вам больше подходит

Aleksandr
27.06.2018
11:49:07
инсерт вроде не инвалидирует никакие итераторы

Andrey
27.06.2018
11:52:40
"No iterators or references are invalidated." https://en.cppreference.com/w/cpp/container/map/insert

Vhäldemar
27.06.2018
11:52:51
я смотрю код в проекте, там вот такой инсерт как я показал. понятно, что оно нафиг не надо с итератором и можно просто insert

ребята, видать, решили упороться и подсказать контейнеру

код-то 13 года

Ilia
27.06.2018
11:59:22
Парни, ктонить рубит в таком legacy-дерьме, как COM/OLE, а тем более в совместимости 32/64 bit OLE components? Есть вопросы...

Mikhail Voronov
27.06.2018
12:34:57
std::map и end() безопасно ли его брать один раз и потом просто в цикле делать инсерт? auto iter = sources->end(); for (auto source : data) { sources->insert(iter, <some_data>); } ? или правильнее(и медленнее?) его апдейтить всегда
да, всё верно. Но неправильный hint замедляет вставку (вот тут в ответе есть пример: https://stackoverflow.com/questions/4342204/is-there-any-position-limitation-on-the-insert-hint-for-stdmap/4342257)

isnullxbh
27.06.2018
12:40:49
Ребят, как можно в std::bind вариадики использовать? Пока мне кажется, что это можно сделать с помощью макросов (но я не уверен) Типа, если заюзать это: https://stackoverflow.com/questions/12447557/can-we-have-recursive-macros и это: template <std::size_t N> decltype(auto) make_placeholder() { return std::placeholders::__ph<N>(); }; А вообще мне хотелось бы следующее (коммент в последнем примере кода): template <typename Ret, typename ...Args> class Signal { public: using BindFunction = std::function<Ret(Args...)>; public: explicit Signal(BindFunction _function) : m_bind_function(_function) {} public: Ret call(Args... args) { return m_bind_function(args...); } protected: BindFunction m_bind_function; }; инстанс которого создается: template <typename Ret, typename Type, typename ...Args> decltype(auto) make_signal(Type* _object, Ret (Type::*_method)(Args...)) { return Signal<Ret, Args...>(std::bind(_method, _object, /* ТУТ ДОЛЖНО БЫТЬ ЧТО_ТО...*/)); };

isnullxbh
27.06.2018
12:54:52
Используйте лямбду вместо std::bind.
Что-то вроде такого: [] { return (_object->*_method)(...) } ? А как быть с параметрами ф-ии?

Igor
27.06.2018
12:59:35
Что-то вроде такого: [] { return (_object->*_method)(...) } ? А как быть с параметрами ф-ии?
return Signal<Ret, Args...>([=](Args... args) -> Ret { return (_object->*_method)(args...); });

isnullxbh
27.06.2018
13:02:05
return Signal<Ret, Args...>([=](Args... args) -> Ret { return (_object->*_method)(args...); });
Ееееее)) Спасибо Вам большое! Как так хитро лямбда _забивает_ на эти параметры?

Google
Friedrich
27.06.2018
13:02:33
Почему забивает-то? Она их биндит.

isnullxbh
27.06.2018
13:05:16
Почему забивает-то? Она их биндит.
Ну у меня не укладывается в голове, как она их биндит, когда есть только типы ))

Alexey
27.06.2018
13:06:04
а вот смежный вопрос, видимо. int foo(int a, int b); int boo(int a, int b); мне нужно из boo вызвать foo с теми же аргументами (форвард, ага), но внутри boo я не знаю имен своих аргументов (ну и сколько их есть вообще). типы и число своих аргументов, в принципе, можно узнать например таким образом: https://functionalcpp.wordpress.com/2013/08/05/function-traits/ но делать с именами? как вызвать foo?

isnullxbh
27.06.2018
13:06:41
Спасибо за разъяснения!

Alexey
27.06.2018
13:07:58
Spoonson
27.06.2018
13:08:13
ох уж эти макросы

Admin
ERROR: S client not available

Alexey
27.06.2018
13:08:15
но число аргументов узнать можно. а вот имена им дать...

Igor
27.06.2018
13:08:54
но число аргументов узнать можно. а вот имена им дать...
ну сгенерите имена тем же макросом и вызов второй функции, в чем проблема?

Alexey
27.06.2018
13:08:56
Упакуйте ее в std::tuple, а потом std::tuple_size
см. ссыль - с типами аргументов и числом аргументов проблем нет. как прокинуть аргументы то сами? значения.

ну сгенерите имена тем же макросом и вызов второй функции, в чем проблема?
проблема в том, что придется делать отдельный макрос для 0 аргументов. отдельный для 1 аргумента, для 2 аргументов и так далее.

Alexey
27.06.2018
13:10:52
Ну параметры-то уже как-то генерятся?
вот через сигнатуру функции: MY_COOL_MACRO(func_name, int(bool, int, std::string));

Igor
27.06.2018
13:11:41
вот через сигнатуру функции: MY_COOL_MACRO(func_name, int(bool, int, std::string));
Ну тогда никак, принимайте параметры как tuple.

Alexey
27.06.2018
13:12:27
:-/

Google
Spoonson
27.06.2018
13:13:17
маловероятно, что будет функция принимающая больше 10 параметров, так что копипасты должно быть не очень много.

Vhäldemar
27.06.2018
13:41:40
да, всё верно. Но неправильный hint замедляет вставку (вот тут в ответе есть пример: https://stackoverflow.com/questions/4342204/is-there-any-position-limitation-on-the-insert-hint-for-stdmap/4342257)
померял локально, хинт "в конец" рабоатет быстрее, чем хинт "после вставленного". но у меня ограничение, что без хинта вообще нельзя. благодарю за линк

Vyacheslav
27.06.2018
14:03:07
Парни, ктонить рубит в таком legacy-дерьме, как COM/OLE, а тем более в совместимости 32/64 bit OLE components? Есть вопросы...
Рубил когда-то. Насчёт совместимости, в реестре эти штуки сложно правильно регистрировать обычно, т.к. для 32 битных классов есть своя секция в реестре. + При создании сервера в CoCreateInstance, кажется, нужно указывать, что создаётся сервер другой разрядности.

Vyacheslav
27.06.2018
14:09:20
По настройкам в реестре не помню уже.

Если не OLE, то нужно proxy/stub компилировать для двух разрядностей.

Ilia
27.06.2018
14:10:31
Они подефолту совместимы, если OLE.
А можно тебе будет потом вопросы позадавать?

Если не OLE, то нужно proxy/stub компилировать для двух разрядностей.
А как вообще понять, какой он разрядности ?

Страница 2162 из 2477