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}; // массив указателей на функции
}
Массив функций
В Delphi это можно организовать так:
type TFunArray = array of function(VarsArray: TVarsArray ):Extended;
А как написать это в С++?
Код:
типы функций должны совпадать, т.е. указателю double(*pf)(int), можно присвоить адрес ф-ии, которая принимает только int и возвращает только double
Цитата: MegaMozg
В с++ можно создать массив УКАЗАТЕЛЕЙ НА ФУНКЦИИ
типы функций должны совпадать, т.е. указателю double(*pf)(int), можно присвоить адрес ф-ии, которая принимает только int и возвращает только double
Код:
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}; // массив указателей на функции
}
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.
{
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.
Цитата: 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.
{
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.
Массив на то и массив, что его значения можно изменять.
Как в твоем примере расширить или изменить декларированный интерфейс?
Вообще да, просто никак)