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

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

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

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

std::function<void MyClass:)> f; ???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2016, 14:25
Ответы с готовыми решениями:

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

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

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

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

9
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
17.12.2016, 14:32 2
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  [ТС] 3
Не работает. Метод принимает целое число, а у вас void foo()

Ошибка (активно) не существует подходящего конструктора для преобразования из "void (MyClass::*)(int a)" в "std::function<void (MyClass &)>"
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
17.12.2016, 14:40 4
Цитата Сообщение от 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  [ТС] 5
Опять не то( Посмотрите пожалуйста

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
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
17.12.2016, 14:47 6
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
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
17.12.2016, 14:52 7
Цитата Сообщение от Index1 Посмотреть сообщение
Опять не то
А где объект MyClass? Вы у какого объекта собрались этот метод вызывать?
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 14:54  [ТС] 8
Да вот только дошло до меня что классы функций нужно вызывать через созданные объекты.
0
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
17.12.2016, 14:56 9
Цитата Сообщение от Index1 Посмотреть сообщение
классы функций нужно вызывать через созданные объекты
Да, в моих примерах выше, объекты биндятся по ссылке/указателю, поэтому должны быть живы на момент вызова функции через std::function.
1
0 / 0 / 0
Регистрация: 17.12.2016
Сообщений: 14
17.12.2016, 15:05  [ТС] 10
Спасибо!
0
17.12.2016, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2016, 15:05
Помогаю со студенческими работами здесь

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

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

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

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

Передать метод класса как параметр
Есть класс A, у него есть метод B, как метод B подсунуть в конструктор std::thread? Что-то типа...

Передать массив обьектов в метод класса
Здраствуйте господа программисты! Подскажите пожалуйста как передать массив обьектов в метод...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru