Сохранение указателей на функции-члены в общих объектах std::function
При попытке сохранить указатели на функции-члены определенного класса на карте с помощью std::function, разработчики могут столкнуться с ошибкой: «термин не возвращает функцию, принимающую 0 аргументов». Эта ошибка возникает при назначении указателя функции-члена непосредственно объекту std::function.
Суть проблемы заключается в том, что нестатические функции-члены требуют неявного указателя «this» в качестве первого аргумента. . Чтобы исправить это, первый аргумент должен быть явно связан.
Решение:
std::functionf = std::bind(&Foo::doSomething, this);
Этот подход эффективно связывает указатель «this» в качестве первого аргумента, позволяя объекту std::function выполнять правильно захватить функцию-член.
Обработка функций с параметрами:
Для функций-членов с параметрами необходимо указать заполнители, указывающие положение связанных аргументов.
using namespace std::placeholders; std::functionf = std::bind(&Foo::doSomethingArgs, this, std::placeholders::_1, std::placeholders::_2);
Синтаксис лямбда-выражений C 11:
Если компилятор поддерживает лямбда-выражения C 11, можно использовать более краткий подход:
std::functionf = [=](int a, int b) { this->doSomethingArgs(a, b); };
Следуя этим методам, разработчики могут эффективно хранить и вызывать указатели на функции-члены, используя общие объекты std::function.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3