Массив указателей на функции-члены класса
От: Rockoos  
Дата: 29.09.04 07:38
Оценка:
Всем привет!

Не подскажите как написать массив Массив указателей на функции-члены класса.

есть например такой класс

class A
{
public:
string GetValue();
string GetIndex();
// еще куча подобных Get-ов
....
};

Хотелось бы запихнуть все Get-ы в массив и потом for-ом выводить. Не подскажите как это написать, в литературе я чета не встречал подобного примера. Если можно прям кусок кода. Буду очень признателен.
Re: Массив указателей на функции-члены класса
От: Glоbus Украина  
Дата: 29.09.04 07:44
Оценка:
Здравствуйте, 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; //собственно список функций


};
Удачи тебе, браток!
Re: Массив указателей на функции-члены класса
От: Bell Россия  
Дата: 29.09.04 07:48
Оценка: 1 (1)
Здравствуйте, 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;
}
Любите книгу — источник знаний (с) М.Горький
Re: Массив указателей на функции-члены класса
От: Rockoos  
Дата: 29.09.04 08:53
Оценка:
Громадное спасибо!!!
Все заработало.
Re: Массив указателей на функции-члены класса
От: Mikka77  
Дата: 29.09.04 14:47
Оценка:
Ну, например, вот так:
тут 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
Re: Массив указателей на функции-члены класса
От: Mikka77  
Дата: 29.09.04 14:52
Оценка:
А еще есть вот такой прикольный сайт:
http://www.function-pointer.org
"Количество времени, необходимое для решения задачи, не зависит от того, было это время использовано для решение данной задачи или нет." ©Mikka77
Re[2]: Массив указателей на функции-члены класса
От: korzhik Россия  
Дата: 29.09.04 14:57
Оценка: :)
Здравствуйте, Mikka77, Вы писали:

M>- через массив указателей-член классаж

M>- через локальный массив в функции-членеж

крутожжж!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.