如 The c++ Programming Language 3rd Edition 中所述在第 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 中描述的缺点,是否有任何示例表明这种实现(使用类型字段)是比利用虚函数的语言特性更好的解决方案? 或者这种做法应该被列为纯粹的邪恶黑名单吗?
现实的例子比人为的例子更受欢迎,但我仍然对人为的例子感兴趣。此外,您是否曾在生产代码中看到过这种情况(即使虚函数会更容易)?
最佳答案
当您“知道”您有一组非常具体的、小的、恒定的类型时,像这样对它们进行硬编码会更容易。当然,常量不是,变量也不是,所以在某些时候您可能不得不重写整个东西。
这或多或少是在几个 Alexandrescu's articles 中用于区分 union 的技术。 .
例如,如果我正在实现 JSON库,我知道每个值只能是对象、数组、字符串、整数、 bool 值或 Null——规范不允许任何其他值。
关于c++ - 类型字段是纯粹的邪恶吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3808220/