gpt4 book ai didi

c++ - 模板滥用?

转载 作者:行者123 更新时间:2023-11-30 03:24:18 24 4
gpt4 key购买 nike

我想将 dynamic_casts 从基类转换为派生自这种样式:

auto derived = dynamic_cast<Derived*>(object);

更紧凑的东西。为此,我在 Base 类中添加了以下模板:

template<typename T>
T As() { return dynamic_cast<T>(this); }

所以现在前面的语句将被重写为

auto derived = object->As<Derived*>();

我比较喜欢这种风格。但我知道可能存在可读性问题(主观)或类的内存使用情况?如果我是正确的,这将为我转换的每种派生类型生成一个函数。这个数字可能很大(100 个不同的派生类)。

我应该坚持使用普通的 dynamic_cast 吗?

最佳答案

如果您阅读许多参与 C++ 设计的专家(Stroustrup、Sutter,等等)的资料,您会发现 dynamic_cast(以及所有的 _cast s) 对程序员来说是冗长和笨拙的设计。

在所有可能的情况下,最好避免使用它们。虽然所有的 _cast 运算符都有它们的位置(即在某些情况下它们确实是问题的最佳解决方案),但它们也是钝器,可用于解决由于不良设计引起的问题.不幸的是,如果有选择的话,很多程序员会选择这种生硬的工具,而不是付出更多的努力来学习适当的技术,并清理他们的设计——这有一些好处,比如让代码更容易正确工作,以及更易于维护。

dynamic_cast 可以说是 _cast 运算符中最糟糕的,因为它几乎总是会在运行时引入开销。如果它用于解决由于不良设计导致的缺陷,则会有明显的运行时损失。

使语法笨拙和冗长会鼓励程序员寻找替代方案(例如,设计类型和对类型的操作,以避免此类转换的需要)。

您所要求的是一种允许程序员轻松使用 dynamic_cast 且思考较少的方法。这将鼓励糟糕的设计,允许程序员轻松使用 _cast 运算符来解决设计问题,而他们通常最好付出更多的努力来避免在第一名。关于可用于避免使用 dynamic_cast 等操作的技术,有大量可用信息。

所以,是的,如果你真的需要使用这样的转换,我建议你坚持使用 dynamic_cast

更好的是,您可能还想努力学习设计技术和习语,以减少您需要使用它的频率。

关于c++ - 模板滥用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49790804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com