Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача метода класса в качестве параметра функции

68K
24 мая 2012 года
666maloi666
5 / / 25.03.2011
День добрый .Как можно организовать передачу метода класса в качестве параметра функции
аналогична примеру передачи функции как параметра другой функции.


Код:
typedef void (*foo)(void);
void F1(foo a)
{
    a();
}
void F2(void)
{
    int i;
    i+=10;
}
int main(void)
{
     F1(F2);
}
277
25 мая 2012 года
arrjj
1.7K / / 26.01.2011
Код:
#include <iostream>

class A{
public:
void a(){std::cout<<(unsigned int)this<<" A::a"<<std::endl;};
void b(){std::cout<<(unsigned int)this<<" A::b"<<std::endl;};
};

typedef void (A::*foo)(void);

void test(A &a,foo f)
{
(a.*f)();
};

A c;

void test2(foo f)
{
(c.*f)();
};

int main()
{
A a;
A b;
test(a,&A::a);
test(a,&A::b);
test(b,&A::a);
test(b,&A::b);
test2(&A::a);
test2(&A::b);
return 0;
}
Так? Не совсем понятно чего ты хочешь добиться?
277
24 мая 2012 года
arrjj
1.7K / / 26.01.2011
Функции разных классов так нельзя передать. А вот функции одного класса - пжлста:
Код:
class Fred {
 public:
   int f(char x, float y);
   int g(char x, float y);
   int h(char x, float y);
   int i(char x, float y);
   ...
 };
 
 // FredMemFn points to a member of Fred that takes (char,float)
 typedef  int (Fred::*FredMemFn)(char x, float y);
...
int main()
{
 FredMemFn a[] = { &Fred::f, &Fred::g, &Fred::h, &Fred::i };
 Fred fred;
 fred.*a[2]('a',2);
return 0;
}
Полный пример: http://www.parashift.com/c++-faq-lite/pointers-to-members.html
68K
24 мая 2012 года
666maloi666
5 / / 25.03.2011
Пасиб arrjj то что надо !!!
А я вот так с void-ами забабахал .

Код:
class LOL
   {
   public:
       void F1(void){cout<<"PISH PISH"<<endl;};
   };
   void F2(LOL FUU)
   {
       FUU.F1();
   };
int main (void)
{
    LOL K;
    F2(K);

   system("pause");
};
68K
24 мая 2012 года
666maloi666
5 / / 25.03.2011
Все же не совсем то что нужно=( нужно приблизительно вот токого типа

Код:
class lol
{
    public:
    void F2(void);
};
void (*foo)(void);
class Knopka
{
    public:
    void F1(lol::&foo);
};
lol Cl;
int main(void)
{
    F1(Cl.F2); <<<<------- не посредственно  то чего я добиваюсь
}
277
24 мая 2012 года
arrjj
1.7K / / 26.01.2011
Код:
class lol
{
    public:
    void F2(void);
       void F3(void);
};
void (lol::*foo)(void);
class Knopka
{
    public:
    void F1(lol a,foo& b)
{
a.b();
}
};
lol Cl;
int main(void)
{
    F1(Cl,Cl.F2);
    F1(Cl,Cl.F3);
}
Както так? Что конкретно ты хочешь сделать?
68K
24 мая 2012 года
666maloi666
5 / / 25.03.2011
К сожалению такой код не работает =( В общем суть такова делаю устройство на микроконтроллере,у меня есть функция обработчик нажатие кнопок .Работает нормально как показана в самом начале F2 становится аргументом функции F1.Но функции передавать не очень удобно так как вкладок много и начинается путаница решил упорядочить с помощью классов и в функцию F1 кидать методы класса допустим приблизительно так ( F1(Главное меню.вывод времени); дальше F1(Меню установки даты.установить дату); F1(Меню установки даты.будильник на такуета дату);) чтот тип того
3
25 мая 2012 года
Green
4.8K / / 20.01.2000
Советую почитать про функторы.
11
25 мая 2012 года
oxotnik333
2.9K / / 03.08.2007
Опа, зеленые человечки вернулись :)
А тут джоппэ с форумом...
68K
27 мая 2012 года
666maloi666
5 / / 25.03.2011
О вот это то что нужно=))) Пасиб arrjj.Как я писал это обработчик нажатия кнопки на МК.Имеется класс "меню"в нем я описываю допустим какой курсор надо выводить на дисплей какие строки и т.д и потом с помощью метода вывода меню
 
Код:
test (Главное_меню,&Меню::Вывод_Инфы_На_Дисплей);
выводится инфа в той или иной вкладке со своим курсором,своими строками и т.д. Как то так O_o.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог