Как обсуждается в на языке программирования c ++, 3-е издание в разделе 12.2.5, поля типов имеют тенденцию создавать код, который менее универсален, подвержен ошибкам, менее интуитивен и менее удобен, чем эквивалентный код, который использует виртуальные функции и полиморфизм.
В качестве краткого примера, вот как будет использоваться поле типа:
void print(const Shape &s)
{
switch(s.type)
{
case Shape::TRIANGE:
cout << "Triangle" << endl;
case Shape::SQUARE:
cout << "Square" << endl;
default:
cout << "None" << endl;
}
}
Понятно, что это кошмар, поскольку добавление к нему нового типа фигуры и дюжины подобных функций может привести к ошибкам и обременительным.
Несмотря на эти недостатки и описанные в TC ++ PL, есть ли примеры, когда такая реализация (использующая поле типа) является лучшим решением, чем использование языковых возможностей виртуальных функций? Или эта практика должна быть в черном списке как чистое зло?
Реалистичные примеры предпочтительнее надуманных, но мне все равно будут интересны надуманные примеры. Кроме того, вы когда-нибудь видели это в рабочем коде (хотя виртуальные функции были бы проще)?