Объекты могут поставляться сторонним кодом, при этом может отсутствовать возможность переписать методы, но могут требоваться различные действия в зависимости от фактического класса каждого объекта. Предположим, под A скрывается TEvent, версии функции - это обработчики, а метод вызывается в том случае, если приложение обрабатывает данное событие. Факт наличия версии, принимающей указатель на фактический класс, - не достаточный признак. Пусть
Код: Выделить всё
TEvent
{
private:
volatile bool f;
public :
virtaual void Processed()=0;
};
class TCharEvent: public TEvent
{
};
class TUnichar32Event: public TCharEvent
{
public:
public:
virtaual void Processed()
{
f=true;
}
chart32_t Code;
};
class TUnichar16Event: public TCharEvent
{
public:
public:
virtaual void Processed()
{
f=true;
}
union
{
wchar_t Code;
wchar_t SurrogatCode[2];
};
};
class TAnsicharEvent: public TCharEvent
{
public:
public:
virtaual void Processed()
{
f=true;
}
char Code;
};
class TLButtonEvent: public TEvent
{
public:
public:
virtaual void Processed()
{
f=true;
}
int x;
int y;
};
и по каким то причинам решено TUncar32Event и TAnsicharEvent обрабатывать в одном обработчике, принимающем указатель на TCharEvent, TLButttonEvent - в другой, а TUnichar16Event - не обрабатывать вообще. Хорошо, когда вызываемый и вызывающий код прописаны в одном проекте, тогда просто используем указатель в качестве фактического параметра и ни каких гвоздёв. А если они в разных проектах? Если я передам один указатель на функцию, то он будет указывать только на одну версию и тест показывает, что по указателю на функцию вызывается та версия, на которую он указывает, всегда одна и та же. Тот же тест показывает, что при вызове функции по имени самой функции стандарт соблюдается и вызываемая версия зависит от фактического класса объекта, на которую указывает параметр. А как это достигается? Может отсюда можно вытянуть способ выбора версии в стороннем вызывающем коде?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.