Jos*_*shD 4 c++ code-organization
正如在12.2.5节中的c ++编程语言第3版中所讨论的那样,类型字段倾向于创建比使用虚函数和多态的等效代码更不通用,容易出错,更不直观和更少可维护的代码.
举个简短的例子,下面是如何使用类型字段:
void print(const Shape &s)
{
switch(s.type)
{
case Shape::TRIANGE:
cout << "Triangle" << endl;
case Shape::SQUARE:
cout << "Square" << endl;
default:
cout << "None" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
很明显,这是一个噩梦,因为为此增加了一种新的形状,十几种类似的功能会容易出错并且很费劲.
尽管存在这些缺点以及TC++ PL中描述的那些缺点,但是有没有这样的实例(使用类型字段)比使用虚函数的语言特性更好的解决方案?或者这种做法应该被列为纯粹的邪恶?
现实的例子比人为的例子更受欢迎,但我仍然对人为的例子感兴趣.另外,你有没有在生产代码中看到这一点(即使虚拟功能会更容易)?
小智 7
当你"知道"你有一个非常特定的,小的,不变的类型集时,就可以更容易地对它们进行硬编码.当然,常量不是,变量不是,所以在某些时候你可能不得不重写整个事情.
这或多或少是在Alexandrescu的几篇文章中用于歧视联盟的技术.
例如,如果我实现了一个JSON库,我就知道每个Value只能是一个Object,Array,String,Integer,Boolean或Null - 规范不允许任何其他值.