Передача метода класса в качестве параметра функции
аналогична примеру передачи функции как параметра другой функции.
Код:
typedef void (*foo)(void);
void F1(foo a)
{
a();
}
void F2(void)
{
int i;
i+=10;
}
int main(void)
{
F1(F2);
}
void F1(foo a)
{
a();
}
void F2(void)
{
int i;
i+=10;
}
int main(void)
{
F1(F2);
}
Код:
#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;
}
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;
}
Код:
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;
}
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;
}
А я вот так с 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");
};
{
public:
void F1(void){cout<<"PISH PISH"<<endl;};
};
void F2(LOL FUU)
{
FUU.F1();
};
int main (void)
{
LOL K;
F2(K);
system("pause");
};
Код:
class lol
{
public:
void F2(void);
};
void (*foo)(void);
class Knopka
{
public:
void F1(lol::&foo);
};
lol Cl;
int main(void)
{
F1(Cl.F2); <<<<------- не посредственно то чего я добиваюсь
}
{
public:
void F2(void);
};
void (*foo)(void);
class Knopka
{
public:
void F1(lol::&foo);
};
lol Cl;
int main(void)
{
F1(Cl.F2); <<<<------- не посредственно то чего я добиваюсь
}
Код:
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);
}
{
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);
}
К сожалению такой код не работает =( В общем суть такова делаю устройство на микроконтроллере,у меня есть функция обработчик нажатие кнопок .Работает нормально как показана в самом начале F2 становится аргументом функции F1.Но функции передавать не очень удобно так как вкладок много и начинается путаница решил упорядочить с помощью классов и в функцию F1 кидать методы класса допустим приблизительно так ( F1(Главное меню.вывод времени); дальше F1(Меню установки даты.установить дату); F1(Меню установки даты.будильник на такуета дату);) чтот тип того
Советую почитать про функторы.
А тут джоппэ с форумом...
Код:
test (Главное_меню,&Меню::Вывод_Инфы_На_Дисплей);