Size: a a a

2020 December 14

d

disba1ancer in pro.cxx
Ofee
Вот здесь:
Unless F is designated an addressable function, the behavior of a C++ program is unspecified (possibly ill-formed) if it explicitly or implicitly attempts to form a pointer to F
А это накладывает ограничения на std::bind?
источник

VS

Vlad Serebrennikov in pro.cxx
disba1ancer
А это накладывает ограничения на std::bind?
не должно, мне кажется
источник

O

Ofee in pro.cxx
disba1ancer
А это свинство, к таким обёртку только кодогеном делать
auto tolower_alias = LIFT(std::tolower);
источник

O

Ofee in pro.cxx
disba1ancer
А это накладывает ограничения на std::bind?
Полагаю, что да, но я не уверен в этом наверняка
источник

VS

Vlad Serebrennikov in pro.cxx
Vlad Serebrennikov
не должно, мне кажется
источник

O

Ofee in pro.cxx
Есть мнение, что std::bind, std::transform всё же некорректно использовать с non-addresable function. И проблема здесь вовсе не в std::bind или std::transform, а в том, что мы не можем передать первый аргумент, поскольку это требует взять его адрес в процессе передачи по ссылке
источник

Kt

Klin tyffo in pro.cxx
привет может кто-то помочь скрипт всунуть в программу?
источник

СЧ

Сергей Чурмин... in pro.cxx
Доброго дня. Друзья вопрос тупеньки но спрошу, а ну нас же нет такого как в питоне и прочем, что можно в функцию передавать указатели на другую функцию с неявной сигнатурой?
источник

AT

Alexander Tulikov in pro.cxx
Сергей Чурмин
Доброго дня. Друзья вопрос тупеньки но спрошу, а ну нас же нет такого как в питоне и прочем, что можно в функцию передавать указатели на другую функцию с неявной сигнатурой?
Можно указатель на функцию приводить к void (*)() и передавать.
источник

СЧ

Сергей Чурмин... in pro.cxx
Alexander Tulikov
Можно указатель на функцию приводить к void (*)() и передавать.
хм не совсем понял, можно пример объявления там
void foo(QString args, ???someFoo???)
источник

AT

Alexander Tulikov in pro.cxx
Сергей Чурмин
хм не совсем понял, можно пример объявления там
void foo(QString args, ???someFoo???)
void foo(QString args, void (*fp)())
источник

СЧ

Сергей Чурмин... in pro.cxx
Alexander Tulikov
void foo(QString args, void (*fp)())
хм, не разу не видел такой прием, надо погуглить, мерси
источник

ПК

Побитый Кирпич... in pro.cxx
Сергей Чурмин
Доброго дня. Друзья вопрос тупеньки но спрошу, а ну нас же нет такого как в питоне и прочем, что можно в функцию передавать указатели на другую функцию с неявной сигнатурой?
Что значит неявная сигнатура?
источник

AT

Alexander Tulikov in pro.cxx
Klin tyffo
привет может кто-то помочь скрипт всунуть в программу?
Это не тематика данного чата, но можешь посмотреть в сторону http://lua-users.org/wiki/SimpleLuaApiExample
источник

h

hazer_hazer in pro.cxx
Сергей Чурмин
Доброго дня. Друзья вопрос тупеньки но спрошу, а ну нас же нет такого как в питоне и прочем, что можно в функцию передавать указатели на другую функцию с неявной сигнатурой?
тут вопрос не в передаче, а в том, что в плюсах сигнатура = сигнатура. это не js, где передаешь что хочешь и потом через arguments достаешь
источник

VS

Vlad Serebrennikov in pro.cxx
Ofee
Есть мнение, что std::bind, std::transform всё же некорректно использовать с non-addresable function. И проблема здесь вовсе не в std::bind или std::transform, а в том, что мы не можем передать первый аргумент, поскольку это требует взять его адрес в процессе передачи по ссылке
он сразу пишет, что в
std::invoke(std::boolalpha, std::cout);
we are attempting to form a pointer to std::boolalpha

но я не нахожу этому подтверждений

std::invoke определен через INVOKE, который определен и для случая, когда передается не указатель на функцию, то есть function-to-pointer преобразование не требуется. есть еще косвенный аргумент, который полагается на качество реализации, что std::is_pointer_v<decltype(f)> == false.

что касается std::bind, то там за несколько шагов дело доходит до function object type, и function-to-pointer преобразование действительно требуется, поэтому я не прав и передавать ему неадресуемые функции нельзя
источник

СЧ

Сергей Чурмин... in pro.cxx
Побитый Кирпич
Что значит неявная сигнатура?
такс, проще задачу обыяснить, есть класс Core в нем есть компанент, котороый связывается с базой данных, все построено на Qt тобишь сигнал слот, так вот, на разные запросы идут разные хандлеры, тобишь есть функция
void request(QString SQLString, QString action);
сейчас как это работает отправляется сигнал со стройкой SQL и меткой, Db обрабатывается ответ, и отправляет его с меткой, функция приемник через обычный свич смотрит метку и уже понимает что делать с ответом, все вроде нечего но функция приемник уже выросла неимоверно и хочется сразу бросать калбэк, вот не разу с ними не работал, хочется разобратся
источник

h

hazer_hazer in pro.cxx
Сергей Чурмин
такс, проще задачу обыяснить, есть класс Core в нем есть компанент, котороый связывается с базой данных, все построено на Qt тобишь сигнал слот, так вот, на разные запросы идут разные хандлеры, тобишь есть функция
void request(QString SQLString, QString action);
сейчас как это работает отправляется сигнал со стройкой SQL и меткой, Db обрабатывается ответ, и отправляет его с меткой, функция приемник через обычный свич смотрит метку и уже понимает что делать с ответом, все вроде нечего но функция приемник уже выросла неимоверно и хочется сразу бросать калбэк, вот не разу с ними не работал, хочется разобратся
сделай что-то вроде базового класса для возможных аргументов listener функций. Что-то типа своего Any
источник

ПК

Побитый Кирпич... in pro.cxx
Сергей Чурмин
такс, проще задачу обыяснить, есть класс Core в нем есть компанент, котороый связывается с базой данных, все построено на Qt тобишь сигнал слот, так вот, на разные запросы идут разные хандлеры, тобишь есть функция
void request(QString SQLString, QString action);
сейчас как это работает отправляется сигнал со стройкой SQL и меткой, Db обрабатывается ответ, и отправляет его с меткой, функция приемник через обычный свич смотрит метку и уже понимает что делать с ответом, все вроде нечего но функция приемник уже выросла неимоверно и хочется сразу бросать калбэк, вот не разу с ними не работал, хочется разобратся
Лучше покажи кодом
источник

ПК

Побитый Кирпич... in pro.cxx
hazer_hazer
сделай что-то вроде базового класса для возможных аргументов listener функций. Что-то типа своего Any
Лучше сделать any_function на type erasure тогда уж
источник