Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/75: Рейтинг темы: голосов - 75, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14

В std::function передать метод класса

17.12.2016, 14:25. Показов 15041. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть класс MyClass и в нем функция void Func(int). Как правильно объявить переменную function на этот метод?

std::function<void MyClass:)> f; ???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2016, 14:25
Ответы с готовыми решениями:

Вызов const метод std::function
Добрый день, #include &lt;functional&gt; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; class Foo { ...

Std::function для хранения функции класса
class test { public: test() { f = display5; //Как правильно написать? } void setFunction(function&lt;void()&gt; func) ...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

9
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
17.12.2016, 14:32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <functional>
 
struct A
{
    void foo() { std::cout << "A::foo\n"; }
};
 
int main()
{
    std::function<void(A&)> f = &A::foo;
    A a;
    f(a);
}
http://rextester.com/DDDBK9840
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 14:38  [ТС]
Не работает. Метод принимает целое число, а у вас void foo()

Ошибка (активно) не существует подходящего конструктора для преобразования из "void (MyClass::*)(int a)" в "std::function<void (MyClass &)>"
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
17.12.2016, 14:40
Цитата Сообщение от Index1 Посмотреть сообщение
Метод принимает целое число
Ну так переделайте под себя.
C++
1
2
3
std::function<void(MyClass&, int)> f = &MyClass::foo;
MyClass a;
f(a, 10);
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 14:45  [ТС]
Опять не то( Посмотрите пожалуйста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <functional>
 
class MyClass
{
public:
    void F1(int a)
    {
    }
};
 
int main()
{
    std::function< void (MyClass&, int) > func2 = &MyClass::F1;
    func2(5);
 
    return 0;
}
 
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка (активно)отсутствуют экземпляры функцию "std::_Func_class<_Ret, _Types...>::operator() [с _Ret=void, _Types=<MyClass &, int>]", соответствующие списку аргументов
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2016, 14:47
Index1, можно еще так:
C++
1
2
3
4
5
6
7
8
9
10
struct MyClass
{
    void func(int) {}
};
 
int main()
{
    MyClass obj;
    std::function<void (int)> x(std::bind(&MyClass::func, &obj, std::placeholders::_1));
}
или так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct MyClass
{
    void func(int) {}
};
 
int main()
{
    MyClass obj;
    std::function<void (int)> x(
        [&obj](int a) 
        { 
            return obj.func(a); 
        }
    );
}
2
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
17.12.2016, 14:52
Цитата Сообщение от Index1 Посмотреть сообщение
Опять не то
А где объект MyClass? Вы у какого объекта собрались этот метод вызывать?
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 14:54  [ТС]
Да вот только дошло до меня что классы функций нужно вызывать через созданные объекты.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2016, 14:56
Цитата Сообщение от Index1 Посмотреть сообщение
классы функций нужно вызывать через созданные объекты
Да, в моих примерах выше, объекты биндятся по ссылке/указателю, поэтому должны быть живы на момент вызова функции через std::function.
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 15:05  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2016, 15:05
Помогаю со студенческими работами здесь

Callback std::function + доступ к приватным полям класса методам которые не есть их полями
Проблема, товарищи. В прикрепленном архиве 3 файла, из которых состоит моя программа: **main.cpp; prototypes.h; realization.cpp** 1....

Передать инициализированный std::vector конструктору базового класса
В общем появилась одна проблема. Никак не пойму как можно сделать. В общем дело такое: 1) Есть класс Coord, который содержит координаты. ...

Какая реализация лучше? std::pointer_to_binary_function vs std::function
Какая реализация (set_p или set_f) лучше /современнее / эффективнее ? pointer_to_binary_function в С++11 объявлен как deprecated. Правильно...

Использование std::function в std::thread
Нужно вызвать function fnc в новом потоке. Как сделать? function &lt;void(vector&lt;char&gt;)&gt; fnc; void test(vector&lt;char&gt; data) { ...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru