我想要将dynamic_casts从基类转换为从这种样式派生:
auto derived = dynamic_cast<Derived*>(object);更紧凑的东西。为此,我在Base类中添加了以下模板:
template<typename T>
T As() { return dynamic_cast<T>(this); }因此,现在前面的语句将被重写为
auto derived = object->As<Derived*>();我更喜欢这种风格。但是我知道可能会有可读性问题(主观的)或者类的内存使用问题?如果我是正确的,这将为每种类型的派生I强制转换生成一个函数。这个数字可能很大(100个不同的派生类)。
我应该坚持使用普通的dynamic_cast吗?
发布于 2018-04-12 17:16:37
如果你阅读了许多参与C++设计的专家的资料(Stroustrup、Sutter等等),你会发现dynamic_cast (以及所有的_cast)在设计上对程序员来说是冗长和笨拙的。
在所有可能的情况下,最好避免使用它们。虽然所有的_cast操作符都有自己的位置(即,在某些情况下,它们确实是问题的最佳解决方案),但它们也是可以用来解决由于糟糕的设计而导致的问题的生硬工具。不幸的是,如果可以选择,许多程序员会使用这种生硬的工具,而不是花更多的精力来学习适当的技术,并清理他们的设计-这有一些好处,比如让代码更容易正确地工作,更容易维护。
可以说,dynamic_cast是最糟糕的_cast操作符,因为它几乎总是在运行时引入开销。如果它被用来解决由于糟糕的设计而导致的缺陷,就会有明显的运行时损失。
让语法变得笨拙和冗长会鼓励程序员寻找替代方案(例如,设计类型和类型上的操作,以避免这种转换的需要)。
您所要求的是一种让程序员能够更轻松、更省心地使用dynamic_cast的方法。这将鼓励糟糕的设计,因为它允许程序员轻松地使用_cast运算符来解决设计问题,而他们通常会更努力地避免首先需要这样的转换。有大量关于技术的信息可以用来避免使用像dynamic_cast这样的操作。
所以,是的,如果你真的需要使用这样的转换,我建议你坚持使用dynamic_cast。
更好的是,您可能还希望应用努力来学习设计技术和习惯用法,以减少您需要使用它的频率。
https://stackoverflow.com/questions/49790804
复制相似问题