«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как сохранить указатели на функции-члены в общих объектах `std::function`?

Как сохранить указатели на функции-члены в общих объектах `std::function`?

Опубликовано 21 декабря 2024 г.
Просматривать:743

How to Store Member Function Pointers in Generic `std::function` Objects?

Сохранение указателей на функции-члены в общих объектах std::function

При попытке сохранить указатели на функции-члены определенного класса на карте с помощью std::function, разработчики могут столкнуться с ошибкой: «термин не возвращает функцию, принимающую 0 аргументов». Эта ошибка возникает при назначении указателя функции-члена непосредственно объекту std::function.

Суть проблемы заключается в том, что нестатические функции-члены требуют неявного указателя «this» в качестве первого аргумента. . Чтобы исправить это, первый аргумент должен быть явно связан.

Решение:

std::function f = std::bind(&Foo::doSomething, this);

Этот подход эффективно связывает указатель «this» в качестве первого аргумента, позволяя объекту std::function выполнять правильно захватить функцию-член.

Обработка функций с параметрами:

Для функций-членов с параметрами необходимо указать заполнители, указывающие положение связанных аргументов.

using namespace std::placeholders;
std::function f = std::bind(&Foo::doSomethingArgs,
                                                 this,
                                                 std::placeholders::_1,
                                                 std::placeholders::_2);

Синтаксис лямбда-выражений C 11:

Если компилятор поддерживает лямбда-выражения C 11, можно использовать более краткий подход:

std::function f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
};

Следуя этим методам, разработчики могут эффективно хранить и вызывать указатели на функции-члены, используя общие объекты std::function.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3