static-polymorphism相关内容

C ++中的动态与静态多态性:哪个更可取?

我了解动态/静态多态性取决于应用程序设计和要求.但是,如果可能的话,是否总是选择静态多态性而不是动态多态性?特别是,我可以在我的应用程序中看到以下两种设计选择,这两种选择似乎都被建议不要使用: 使用 CRTP 实现静态多态性:没有 vtable 查找开销,同时仍以模板基类的形式提供接口.但是,使用大量的 switch 和 static_cast 来访问正确的类/方法,这是危险的 动态多 ..
发布时间:2022-01-24 16:30:17 C/C++开发

静态多态对实现接口有意义吗?

祝大家圣诞快乐! 我正在学习静态多态性,并且正在阅读 Andrei Alexandrescu 关于基于策略的设计的优秀书籍.我在我的代码中遇到了以下内容:我有接口 Interface 指定方法 Foo 必须存在.该接口将由类 Impl 实现.我有以下两种选择: 1) 动态多态性 类接口{上市:虚空 Foo() = 0;}类Impl:公共接口{上市:无效 Foo() {};} 2) ..

静态多态定义与实现

我对静态多态性的概念有一些疑问,我有时听说;您可能主要在 C++ 的上下文中解释它们,但我希望在适用的情况下提供与语言无关的答案(因此标记 C++ 和语言无关). 我们如何定义静态多态? 作为一个例子,我相信 std::sort 函数来自C++ 应该被认为是静态多态的,因为它依赖于一些对象提供的接口,这些对象行为类似于迭代器,并且提供的迭代器接口下的确切行为可以在编译时.这个解释是我们如何定 ..

如何正确使用《C++ 核心指南:C.146:在类层次结构导航不可避免的地方使用 dynamic_cast》

动机 C++ 核心指南建议在“无法避免类层次结构导航"时使用 dynamic_cast.这会触发 clang-tidy 抛出以下错误: Do not use static_cast to downcast from a base to aderived class;改用 dynamic_cast [cppcoreguidelines-pro-type-static-cast-downcast ..

在C ++中键入静态鸭子

对于由模板参数指定的类型,C ++具有某种形式的鸭子类型.我们不知道 DUCK1 和 DUCK2 是什么类型,但是只要它们可以 quack(),它将编译并运行: 模板void let_them_quack(DUCK1 *唐纳德,DUCK2 *雏菊){唐纳德> quack();雏菊-> quack();} 但是写起来有点不方便.当我完全不在乎 DUCK1 和 D ..
发布时间:2021-04-20 18:33:40 C/C++开发

是否可以使用CRTP在静态多态中模拟纯虚函数?

我正在尝试使用CRTP实现编译时多态性,并希望强制派生类实现该功能. 当前的实现是这样的. template结构基数{无效f(){static_cast(this)-> f();}};struct派生的:base派生的.{无效f(){...}}; 在此实现中,如果派生类未实现 f(),则对该函数的调用会陷入无限循环. 如何 ..
发布时间:2021-04-19 19:21:37 C/C++开发

基类中的重复出现的模板模式和静态变量

因此感谢这个答案我正在考虑用CRTP实现我的问题.但是我有一个问题.在我的静态基类中,我有2组函数.一个采用std :: vectors,另一个采用标准C样式数组.因此,在基类中,我定义了一个静态函数,该函数调用non-std :: vector函数. 但是,当我从该基类派生时,我似乎不再能够访问该基类中的公共静态函数(我以为可以). template ..
发布时间:2020-07-25 20:18:08 C/C++开发

在编译时查找基类

标题几乎说明了一切:在C ++中,有没有一种方法可以在编译时获取类的基本类型? IE.是否可以将一个类传递给模板,并让该模板使用将给定类的基础传递给它的其他模板? 我的问题不是我自己是否可以实现这样的功能,我没有问题(使用特质等).我的问题是,是否有一些(模糊的)内置功能可用于此目的. 解决方案 gcc支持此功能.参见 Kerrek的答案 tr2/type_traits A ..
发布时间:2020-07-25 20:18:06 C/C++开发

CRTP和多级继承

我的一位朋友问我“如何使用CRTP替换多级继承中的多态”。更准确地说,在这种情况下: struct A { void bar(){ //做一些事情然后在派生类中调用foo(可能): foo(); } //可能是非纯虚拟 虚拟空虚foo()const = 0; } 结构B:A { void foo()const覆盖{/ *做某事* /} } struc ..
发布时间:2018-08-03 15:50:49 C/C++开发

静态多态定义和实现

我有一些关于静态多边形的概念的问题,我有时会听到;您可能主要在C ++的语境中解释它们,但是如果适用,我会非常感谢与语言无关的答案(因此标记C ++和语言不可知的)。 我们如何定义静态多态性?例如,我相信 std :: sort 函数应该被认为是静态多态的,因为它取决于某些对象的某些接口,这些对象的行为像迭代器,并且确切的行为在提供的迭代器的接口下,可以在编译时确定。这个解释我们如何定义静态 ..

C ++静态而不是动态多态性

我正在尝试构建一个通用的算法。到目前为止,我已经使用类层次结构和指针,如下例所示: struct Base { virtual double fn(double x){return 0;} }; 类派生:public Base { double A; public: Derived(double a):A(a){} double fn(double x){return ..
发布时间:2016-10-23 19:46:28 C/C++开发

Dyamic vs静态多态性在C ++:这是更好的?

我理解动态/静态多态性取决于应用程序设计和要求。但是,如果可能的话,总是选择静态多态性是动态的建议吗?特别是,我可以在我的应用程序中看到以下2个设计选择,这两个设计选择似乎不建议这样做: 使用CRTP的静态多态性:没有vtable查找开销,同时仍然以模板基类的形式提供接口。 动态多态性:实现接口(纯虚拟类),关联(纯虚拟类),使用多个开关和static_cast访问正确的类/方法 ..
发布时间:2016-10-22 17:41:23 C/C++开发

静态多态性对于实现接口是否有意义?

和圣诞快乐每个人! 我正在学习静态多态性,我正在阅读Andrei Alexandrescu的政策性设计的优秀书。我遇到了下面的代码:我有接口接口它指定方法 Foo 必须存在。此接口将由类 Impl 实现。我有以下两个选项: 1)动态多态性 class Interface { public: virtual void Foo()= 0; } 类Impl:public ..

静态多态性定义和实现

我有一些关于静态多元性的概念的问题,我有时候会听到;你可以主要在C ++的上下文中解释它们,但是在适用的情况下我会赞赏与语言无关的答案(,因此标记C ++和语言无关的)。 我们如何定义静态多态性一般?例如,我相信 std :: sort 函数应该被认为是静态多态的,因为它依赖于一些对象提供的某些接口,这些对象的行为类似于迭代器和在所提供的迭代器的接口下可以在编译时确定。 常见的是什么? ..