Здравствуйте, Сергей Губанов, Вы писали:
СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?
Да-да тот самый маразм...
СГ>На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
А ну значит не все так плохо... хоть что-то понял...
СГ>Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.
И зачем ради этого вводить специальную конструкцию в язык? Это что так часто нужно? Вот в С++ есть dynamic_cast и его хватает на все случаи жизни. Да и нужен он очень редко. Ибо виртуальный функции рулят.
Вобще говоря знать динамический тип объекта нужно на столько редко что введение в язык конструкции которая позволяет проверить объект на принадлежность к нескольким типам заставляет задуматься очень не хорошими мыслями об авторе этого языка...
ЗЫ Ловкость рук и...
#define with(dest, src, type)if(type* dest = dynamic_cast<type*>(src))
void MyProc(base* p)
{
with(x, p, T1)
std::cout << x.Str << std::endl;
else with(x, p, T2)
std::cout << x.Value << std::endl;
else
std::cout << "Че за хрень?" << std::endl;
}

... << RSDN@Home 1.1.4 rev. 185 >>