Привет всем!
Есть такая задача (возможно не выполнимая): есть куча класов имеющих одного общего предка (BasicObject), известны имена виртуальных фунций (aSelector), надо узнать есть ли такая виртуальная функция в даном классе (respondsToSelector) и если есть, то вызвать её (performSelector) с возвратом результата работы. Возможно вложение (BasicObject отец А, А отец В и тд...)То есть имеем примерно такой код:
class A: public BasicObject
{
public:
virtual void* function_A();
};
//implementetion
BasicObject::BasicObject()
{
}
BasicObject::~BasicObject()
{
}
BOOL BasicObject::respondsToSelector(char* aSelector)
{
BOOL res = FALSE;
//res = ..... как-то узнаём, есть ли в this-e функция с названием aSelector. Если есть то TRUE, иначе FALSE
return res;
}
void* BasicObject::performSelector(char* aSelector)
{
void* res = NULL;
//res = ..... а тут мы как-то вызываем функцию с названием aSelector, и указатель на результат запоминаем
return res;
}
void* A::function_A()
{
return "call function_A from class A";
}
void main()
{
A* pA = new A();
if (pA->respondsToSelector("function_A")) //должно выполниться
{
printf("%s", pA->performSelector("function_A"));//должно напечатать "call function_A from class A"
}