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

Ваш аккаунт

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

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

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

Массив функций

6.0K
17 мая 2008 года
Balda
79 / / 12.05.2008
Нужно создать тип данных, представляющий собой массив функций.
В Delphi это можно организовать так:
type TFunArray = array of function(VarsArray: TVarsArray ):Extended;

А как написать это в С++?
394
18 мая 2008 года
MegaMozg
317 / / 18.03.2006
В с++ можно создать массив УКАЗАТЕЛЕЙ НА ФУНКЦИИ

 
Код:
double f(int){return 9.;};

int main(){

double(*pf)(int); // указатель на функцию
pf = f; // присвоили указателю адрес f
typedef double(*PTOF)(int); // PTOF краткая запись для типа double(*pf)(int);
PTOF a[3] = {f, g, h}; // массив указателей на функции

}


типы функций должны совпадать, т.е. указателю double(*pf)(int), можно присвоить адрес ф-ии, которая принимает только int и возвращает только double
1.8K
19 мая 2008 года
Arkady
153 / / 18.12.2007
Цитата: MegaMozg
В с++ можно создать массив УКАЗАТЕЛЕЙ НА ФУНКЦИИ

 
Код:
double f(int){return 9.;};

int main(){

double(*pf)(int); // указатель на функцию
pf = f; // присвоили указателю адрес f
typedef double(*PTOF)(int); // PTOF краткая запись для типа double(*pf)(int);
PTOF a[3] = {f, g, h}; // массив указателей на функции

}


типы функций должны совпадать, т.е. указателю double(*pf)(int), можно присвоить адрес ф-ии, которая принимает только int и возвращает только double



По-моему самый простой способ - сделать абстрактный класс из нужных функций, как раз получишь массив указателей. Унаследовать от него реальный класс и реализовать эти функции.
В С++ это будет виртуальная таблица функций, реализованных в реальном классе, т.е. то, что надо.

Выглядит примерно так:

Код:
class I_MF
{
    virtual void X() = 0;
    virtual void Y() = 0;
}; //это массив функций

class C_RN : public I_MF
{
    virtual void X();
    virtual void Y();
}//это реализация функций.

пользоваться так:

I_MF* pIF = new C_RN;

pIF - будет указателем на таблицу функций, реализованных в C_RN.
3
19 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Arkady
По-моему самый простой способ - сделать абстрактный класс из нужных функций, как раз получишь массив указателей. Унаследовать от него реальный класс и реализовать эти функции.
В С++ это будет виртуальная таблица функций, реализованных в реальном классе, т.е. то, что надо.

Выглядит примерно так:
Код:
class I_MF
{
    virtual void X() = 0;
    virtual void Y() = 0;
}; //это массив функций

class C_RN : public I_MF
{
    virtual void X();
    virtual void Y();
}//это реализация функций.

пользоваться так:

I_MF* pIF = new C_RN;

pIF - будет указателем на таблицу функций, реализованных в C_RN.


Массив на то и массив, что его значения можно изменять.
Как в твоем примере расширить или изменить декларированный интерфейс?

1.8K
20 мая 2008 года
Arkady
153 / / 18.12.2007
Вообще да, просто никак)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог