
Михаил
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 в том числе, я думаю
Хотя я не увидел, что вставка через итератор. В таком случае не знаю

Aidar
27.06.2018
11:40:19

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
что копи?

Aidar
27.06.2018
11:44:45

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
инсерт вроде не инвалидирует никакие итераторы

Aidar
27.06.2018
11:52:00
ваще не понял код
стой падажжи, ты случайно не из питона с OrderedDict?

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


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, /* ТУТ ДОЛЖНО БЫТЬ ЧТО_ТО...*/));
};


Igor
27.06.2018
12:45:06
Ребят, как можно в 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, /* ТУТ ДОЛЖНО БЫТЬ ЧТО_ТО...*/));
};
Используйте лямбду вместо std::bind.


isnullxbh
27.06.2018
12:54:52

Igor
27.06.2018
12:59:35

isnullxbh
27.06.2018
13:02:05

Google

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

isnullxbh
27.06.2018
13:05:16

Scarf
27.06.2018
13:05:46

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
Спасибо за разъяснения!

Spoonson
27.06.2018
13:07:30

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
но число аргументов узнать можно. а вот имена им дать...

isnullxbh
27.06.2018
13:08:21

Igor
27.06.2018
13:08:54

Alexey
27.06.2018
13:08:56

Igor
27.06.2018
13:09:59

Scarf
27.06.2018
13:10:52

Alexey
27.06.2018
13:10:52

Igor
27.06.2018
13:11:41

Alexey
27.06.2018
13:12:27
:-/

Google

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

Alexey
27.06.2018
13:26:13

Vhäldemar
27.06.2018
13:41:40

Vyacheslav
27.06.2018
14:03:07

Ilia
27.06.2018
14:08:36

Vyacheslav
27.06.2018
14:09:20
По настройкам в реестре не помню уже.
Если не OLE, то нужно proxy/stub компилировать для двух разрядностей.

Ilia
27.06.2018
14:10:31