Автор: therom (30.09.2008 в 16:37)
Задача:
В классе иметь массив ссылок на функции этого класса, чтобы вызывать их по номеру из массива.
Также в классе должна присутствовать функция обработки массива с целью получения ссылки на функции (по номеру в массиве) и их вызова.
Например: нужно вызвать функцию №2 класса MyClass........
typedef void (*PF)(void); //Это для ссылки на функцию
// Есть класс:
class MyClass
{
public:
void func1(void){}
void func2(void){}
PF massiv[2]; // создаем массив ссылок для функций
MyClass(void) // Конструктор
{
// в конструкторе присваиваем ссылкам адреса функций
massiv[0]=&func1;
massiv[1]=&func2;
}
};
Выскакивает ошибка в строках конструктора:
Error[Pe144]: a value of type "void (__nearfunc __version_3 MyClass::*)(void)" cannot be used to initialize an entity of type "PF"
Насколько я понял: на стадии конструирования класса еще не известны точные адреса функций
Приняв это предположение как факт, я попытался передать конструктору адрес класса:
MyClass(MyClass* adres) // Конструктор
{
// в конструкторе присваиваем ссылкам адреса функций
massiv[0]=&adres->func1;
massiv[1]=&adres->func2;
}
Теперь выскочила друкая ошибка:
Error[Pe300]: a pointer to a bound function may only be used to call the function
Как правильно реализовать задачу?