Миссия не выполнима, или возможно ли...
От: last_nefelim  
Дата: 11.12.03 18:12
Оценка:
Привет всем!
Есть такая задача (возможно не выполнимая): есть куча класов имеющих одного общего предка (BasicObject), известны имена виртуальных фунций (aSelector), надо узнать есть ли такая виртуальная функция в даном классе (respondsToSelector) и если есть, то вызвать её (performSelector) с возвратом результата работы. Возможно вложение (BasicObject отец А, А отец В и тд...)То есть имеем примерно такой код:

typedef int BOOL;
enum
{
FALSE=0,
TRUE=1
};

class BasicObject
{
public:
BasicObject();
~BasicObject();
virtual BOOL respondsToSelector(char* aSelector);
virtual void* performSelector(char* aSelector);
};

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"
}

if (pA->respondsToSelector("function_B")) //не выполняеться
{
printf("%s", pA->performSelector("function_B"));
}
getchar();
delete pA;
}

Возможно ли реализовать respondsToSelector и performSelector?
С надежной на мощь С++ и человеческого разума Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.