СЧ
Size: a a a
СЧ
h
any_function
на type erasure тогда ужVS
std::invoke(std::boolalpha, std::cout);
std::invoke
определен через INVOKE
, который определен и для случая, когда передается не указатель на функцию, то есть function-to-pointer преобразование не требуется. есть еще косвенный аргумент, который полагается на качество реализации, что std::is_pointer_v<decltype(f)> == false
.std::bind
, то там за несколько шагов дело доходит до function object type, и function-to-pointer преобразование действительно требуется, поэтому я не прав и передавать ему неадресуемые функции нельзяstd::invoke
должен будет принимать указатель, если передать ему именно функциюАК
std::invoke
должен будет принимать указатель, если передать ему именно функциюf
в аргумент, то это уже не какая-то из перегрузок, а вполне конкретная функцияПК
СЧ
ПК
ПК
СЧ
def request (SQLString, callbackSucc, callBackError)что то на подобие
СЧ
ПК
def request (SQLString, callbackSucc, callBackError)что то на подобие
using CallbackSuccess = std::function<void(const Response& response)>;
using CallbackError = std::function<void(const QString& errorMsg)>;
void request(const QString& str, const CallbackSuccess& suc, const CallbackError& err);
СЧ
using CallbackSuccess = std::function<void(const Response& response)>;
using CallbackError = std::function<void(const QString& errorMsg)>;
void request(const QString& str, const CallbackSuccess& suc, const CallbackError& err);
bt
s
O
std::invoke(std::boolalpha, std::cout);
std::invoke
определен через INVOKE
, который определен и для случая, когда передается не указатель на функцию, то есть function-to-pointer преобразование не требуется. есть еще косвенный аргумент, который полагается на качество реализации, что std::is_pointer_v<decltype(f)> == false
.std::bind
, то там за несколько шагов дело доходит до function object type, и function-to-pointer преобразование действительно требуется, поэтому я не прав и передавать ему неадресуемые функции нельзяstd::invoke
, первый аргумент принимается по forwarding-reference. Полагаю, чтобы принять аргумент таким образом (т.е. по ссылке), аргумент должен быть адресуемым, а стандартные функции в основной своей массе таковыми не являются. Так что проблема не в самом invoke
, а в способе передать ему аргументstd::bind
Они оба будут корректно работать в соответствии со всеми требованиями, если мы сумеем сформировать ссылку на функцию. А в общем случае для стандартных функций мы этого сделать не можемПК
IZ