🔥热榜:2024-11-12

dynamic_cast 的实现依赖于 RTTI,所以总是让人觉得它性能不行,使用这个东西多半会有一种犯了大忌的感受。 1、如果继承关系比较简单,比如 rectangle、circle 派生自 shape,只有两层,那么可以使用 variant 来代替虚函数多态。using shape = std::variant; 当需要 downcast 的时候,可以直接从variant的index来查询当前实际的对象,使用get_if来进行转型。 实际上,在这种简单的场景下,dynamic_cast的性能也并不差,虚表中有记录偏移量,我怀疑使用dynamic_cast进行转型应该和variant是差不多的。 2、 如果继承关系比较复杂,variant可能无法适应这样的场景,只好使用传统虚函数多态。如果需要用到dynamic_cast,那么貌似 visitor 模式可以消除掉这种可能,比如:struct Visitor; struct West { virtual void accept(Visitor &visitor) = 0; // ... }; struct Lebrun; struct Bronny; struct Visitor { virtual void visit(Lebrun &d) = 0; virtual void visit(Bronny &d) = 0; }; struct Lebrun : public West { void accept(Visitor &visitor) override { visitor.visit(*this); } // ... }; struct Bronny : public Lebrun { void accept(Visitor &visitor) override { visitor.visit(*this); } void enhanced_Wade() { println("不认同裙带关系的,都是底层思维!"); } // ... }; struct WinARealRing : public Visitor { void visit(Lebrun &gOat) override { throw std::runtime_error("没这个能力,知道吧?"); } void visit(Bronny &grandsan) override { grandsan.enhanced_Wade(); } }; int main() { West *p = new Bronny; WinARealRing visitor; p->accept(visitor); // ... return 0; } 这里利用双重分发来回避了 dynamic_cast。 3、基于 2,貌似大部分 downcast 场景都可以使用 Visitor 模式来回避 dynamic_cast;至于 sidecast,本来就是个冷门知识点,很多人都还不知道呢,可见其使用场景更加稀少。 那么问题来了,你在什么情况下非得使用 dynamic_cast 不可?
我去查了夜生白露这个词的意思,没有想出和第三章的深切联系,但是章节名应该有点题的作用,这一章我确实没看出来,望大佬解答。
如果炒股遵循盈利5%就卖出,设定为条件单,自动卖,几个月内总归有波动到盈利5%的时候,比存银行收益好多了。当然5%也可以是8%,看个人喜好和周期长短。 如果亏损了就持有,这样不是稳赚不赔吗?上下波动总归会有的。 这只是一个想法,还没有实践过,请老股民让我警醒。
当地时间11月11日,日本召开特别国会,进行首相指名选举。石破茂再次当选日本首相。石破茂再次当选日本首相_全球速报_澎湃新闻-The Paper
11:05  知乎  孙权是否被过度低估?
11:05  百度贴吧  歼20S模型现身珠海航展
11:05  百度贴吧  王楚钦继续霸榜世一位置
11:05  百度贴吧  《碟中谍8》首支预告公布
11:05  百度贴吧  问界M7失控事故为刹车失灵
11:05  百度贴吧  曼联官宣范尼离队
11:05  百度贴吧  林诗栋能反超王楚钦吗?
11:05  百度贴吧  《剑星》官宣联动《尼尔》