Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2015, 21:50   #1
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию Передача метода одного класса как параметр функции другого

Каким, наиболее простым, способом можно передать указатель на ссылку fb в качестве параметра функции A::fa? В предпоследней строке ошибка, я понимаю,что в качестве параметра нужно указывать void(*f)(), а я пихаю void(B::*f)().
Код:
class A{
public:
    void fa(void(*fa1)()){}
};

class B{
public:
    A a;
    void fb(){}
    void fb2(){ a.fa(&fb) }
};
Вообще хочу организовать обход дерева и при этом для каждого узла вызвать определенную внешнюю функцию.

Последний раз редактировалось KemanSR; 21.07.2015 в 21:54.
KemanSR вне форума Ответить с цитированием
Старый 22.07.2015, 01:03   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

class B;
void fa(void(B::*fa1)()){}
waleri вне форума Ответить с цитированием
Старый 22.07.2015, 17:35   #3
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Прошу прощения, я не до конца сформулировал вопрос. Мне нужно чтобы в классе А не было известно об В. Задача обойти дерево и вывести элементы в CTreeCtrl. Предполагаю сделать метод в классе Doc вывода одного элемента и передать его (метод) в качестве аргумента в класс дерева. А там рекурсией обойти все дерево. Мысль такая: дерево - данные, определенной структуры, зачем же тут думать об их отображении.

Последний раз редактировалось KemanSR; 22.07.2015 в 20:42.
KemanSR вне форума Ответить с цитированием
Старый 22.07.2015, 18:13   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://rextester.com/LZC96702

Код:
//Title of this code
//g++  4.9.2

#include <iostream>
#include <functional>



struct first
{
    typedef std::function<void()>
        event;
    
    event setMethod;
    
    
    template<typename F, class O>
    void set(F method, O& obj)
    {
        setMethod = std::bind( method, std::ref(obj) );
    }
    
    void work()
    {
        if(setMethod)
            setMethod();
        else
            std::cout<<"event not ready...\n";
    }
};


struct second
{
    void work(){ std::cout<<"second::work\n";  }
    
    
    void operator()() { work(); }
};


int main()
{
    std::cout << "Hello, world!\n";
    
    // --- эти классы не подозревают о существовании друг друга
    first f;
    second s;
    
    
    // можно так:
    f.setMethod = std::bind( &second::work, std::ref(s) );
    f.work();
    
    // можно так:
    f.setMethod = [&s]() { s.work(); };
    f.work();
    
    // можно так:
    // у класса second должен быть operator()
    f.setMethod = s;
    f.work();
    
    //можно так:
    f.set( &second::work, s ); 
    f.work();
}
_Bers вне форума Ответить с цитированием
Старый 22.07.2015, 21:20   #5
KemanSR
Форумчанин
 
Регистрация: 03.05.2010
Сообщений: 129
По умолчанию

Не дотягиваю до этого уровня, т.к. ранее не работал с функциональными объектами. Хорошо, применю менее правильный, но более простой способ. Спасибо за ответы.

Последний раз редактировалось KemanSR; 22.07.2015 в 21:32.
KemanSR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов функции из одного класса кнопкой из другого класса lexflax Qt и кроссплатформенное программирование С/С++ 1 12.12.2014 21:48
.NET 4.x Передача в новый поток метода с параметрами из другого класса maxspace C# (си шарп) 1 25.03.2013 14:26
JList Listener непонятки c вызовом метода из другого класса alekola Общие вопросы по Java, Java SE, Kotlin 1 22.11.2012 02:12
получение ссылки на функцию из класса шаблона и передача ее как параметр шаблона pror0ck Общие вопросы C/C++ 7 17.06.2012 15:06
Объект одного класса в конструкторе другого Benderbej PHP 5 13.02.2011 22:48