Всем привет!
Не подскажите как написать массив Массив указателей на функции-члены класса.
есть например такой класс
class A
{
public:
string GetValue();
string GetIndex();
// еще куча подобных Get-ов
....
};
Хотелось бы запихнуть все Get-ы в массив и потом for-ом выводить. Не подскажите как это написать, в литературе я чета не встречал подобного примера. Если можно прям кусок кода. Буду очень признателен.
Здравствуйте, Rockoos, Вы писали:
R>Всем привет!
R>Не подскажите как написать массив Массив указателей на функции-члены класса.
R>есть например такой класс
R>class A
R>{
R>public:
R> string GetValue();
R> string GetIndex();
R> // еще куча подобных Get-ов
R> ....
R>};
R>Хотелось бы запихнуть все Get-ы в массив и потом for-ом выводить. Не подскажите как это написать, в литературе я чета не встречал подобного примера. Если можно прям кусок кода. Буду очень признателен.
#include <map>
#include <string>
class A
{
public:
typedef std::string(A::*GET_FUN_PTR)();
typedef std::map< std::string, GET_FUN_PTR > TFunList; //содержит поименованный список указателей - можно обойти весь итератором или можно выгребать по имени функции
std::string GetValue();
std::string GetIndex();
GET_FUN_PTR GetFun( const std::string& _funName );
private:
TFunList m_Functions; //собственно список функций
};
Здравствуйте, Rockoos, Вы писали:
#include <string>
#include <iostream>
using namespace std;
class A
{
public:
string GetValue();
string GetIndex();
// еще куча подобных Get-ов
//....
};
int main()
{
typedef string (A::*PA)();
PA arr[] = {&A::GetValue, &A::GetIndex};
A obj;
for(int i = 0; i < 2; ++i)
cout << (obj.*arr[i])() << '\n';
return 0;
}
Ну, например, вот так:
тут 3 примера:
— через массив указателей-член классаж
— через локальный массив в функции-членеж
— через массив в функции-не-члене класса. Выбирай, что больше нравится

Кстати, typedef указателя на функцию — это просто для удобства, его можно конечно объявить и не внутри класса, а можно и вовсе не объявлять
#include <iostream.h>
class MyClass {
public:
typedef int(MyClass::*PF)();
int f1(){return 1;}
int f2(){return 2;}
int f3(){return 3;}
MyClass();
void Write();
PF m_pf[3];
};
MyClass::MyClass() {
m_pf[0] = &MyClass::f2;
m_pf[1] = &MyClass::f1;
m_pf[2] = &MyClass::f3;
for(int i=0;i<3;i++)
cout<<(this->*m_pf[i])()<<endl;
}
void MyClass::Write() {
PF pf[] = {f3,f2,f1,};
for(int i=0;i<3;i++)
cout<<(this->*pf[i])()<<endl;
}
int main(int argc, char* argv[])
{
int(MyClass::*pf[])() = {MyClass::f1, MyClass::f2, MyClass::f3};
MyClass mc;
for(int i=0;i<3;i++)
cout<<(mc.*pf[i])()<<endl;
mc.Write();
return 0;
}
"Количество времени, необходимое для решения задачи, не зависит от того, было это время использовано для решение данной задачи или нет." ©Mikka77
А еще есть вот такой прикольный сайт:
http://www.function-pointer.org
"Количество времени, необходимое для решения задачи, не зависит от того, было это время использовано для решение данной задачи или нет." ©Mikka77
Здравствуйте, Mikka77, Вы писали:
M>- через массив указателей-член классаж
M>- через локальный массив в функции-членеж
крутожжж!