virtual-functions相关内容

用模板方法覆盖虚拟方法

可能重复: 成员函数模板可以是虚拟的吗? 在基类中,功能my_func被定义为虚函数.但是,在派生类中,我希望使用my_func作为模板方法.这可能吗? 似乎不是.我收到错误“无法分配抽象类型的对象" ,我认为这与以下事实有关:编译器未确认基类中对虚拟my_func的覆盖.这是否表明设计不佳? 非常感谢. 更新: 感谢您的回答.有人建议我应该发布一些代码,就在这里. 在基 ..
发布时间:2020-11-27 23:16:48 C/C++开发

来自不相关类的虚拟功能表条目

我正在浏览一个简单的C ++ Windows程序(我没有源代码,只有二进制文件)的VFT(VMT),这些程序是由Visual Studio编译并进行了某种优化的. 我注意到这是使用继承和多态性.我找到了该程序具有的每个类的struct s_RTTIBaseClassArray的位置.在该位置,有一个指向struct _s_RTTIBaseClassDescriptor的指针数组.基类描述符数 ..
发布时间:2020-11-27 23:12:09 其他开发

从基类指针调用派生类非虚拟成员函数

我们知道,派生类成员函数可以通过C ++中的基类指针进行访问,提供这些成员函数必须是虚拟的.有没有办法从基类指针访问派生的类成员函数不是虚拟的还是纯虚拟的. 即我想调用仅在派生类&中存在的派生类成员函数.通过基类指针不在基类中.我将如何实现呢? 例如,如果我设计了工厂设计模式, class Vehicle { public: virtual void printVehic ..
发布时间:2020-11-27 22:32:20 C/C++开发

挂钩/绕道虚拟功能

我一直试图在类对象中正确钩住/绕行虚拟函数,并且在调用另一个函数方面已经取得了成功,但是对于this关键字传递给该函数. 我读了一篇有关以类似方式钩住D3D函数的文章,并且提到编译器会将诸如int Class::method(int)之类的函数转换为int method(Class* this, int),但是如果我将vtable中的地址替换为如此定义,"this"的地址不正确,因此可能不正 ..
发布时间:2020-11-23 20:20:23 其他开发

C ++虚拟函数与成员函数指针(性能比较)

由于虚函数调用需要对v表进行额外的索引引用,因此虚函数调用的速度可能会很慢,这可能导致数据高速缓存未命中以及指令高速缓存未命中……不适用于对性能至关重要的应用程序. /p> 因此,我一直在思考一种克服虚拟功能性能问题的方法,但仍具有虚拟功能所提供的某些相同功能. 我相信以前已经做过,但是我设计了一个简单的测试,该测试允许基类存储可由任何派生类设置的成员函数指针.当我在任何派生类上调用Foo ..

什么时候打破二进制兼容性

给我的印象是,无论何时执行以下操作之一: 添加新的公共虚拟方法 virtual void aMethod(); 添加新的公共非虚拟方法 void aMethod(); 从接口实现公共纯虚拟方法虚拟void aMethod覆盖; 实际上破坏了二进制兼容性,这意味着如果一个项目基于DLL的先前版本构建,则由于有新方法可用,因此将无法加载该项目。 根据我使用Visual Studi ..
发布时间:2020-10-24 01:28:42 C/C++开发

虚拟功能无法正常运行

可能重复: 具有虚拟函数和可访问的非虚拟析构函数的类 我是从thenewboston的教程中获得的代码: #include 使用命名空间std; 类敌人{ public: virtual void Attack(){}; }; 类忍者:公开敌人{ 公共: void Attack(){ cout ..
发布时间:2020-10-21 02:49:30 C/C++开发

CPU体系结构的演变如何影响虚拟函数调用性能?

几年前,我正在学习x86汇编程序,CPU流水线,缓存未命中,分支预测以及所有这些爵士乐。 这是一个两半的故事。我了解了冗长的流水线在处理器中的所有奇妙优点,即指令重排序,高速缓存预加载,依赖项交织等。 缺点是标准的任何偏差成本很高。例如,每当您通过指针(!)调用函数时,IIRC在千兆赫兹时代的某个AMD处理器都会受到 40个周期 的惩罚。 。 这不是一个微不足道的“不用担心”数字 ..

构造函数中的虚方法

禁止在C ++中调用虚拟方法,但是在某些情况下,它可能非常有用。 请考虑以下情况-一对Parent和Child类。父构造函数需要实例化Child类,因为它必须以特殊方式对其进行初始化。 但是有一个问题-因为在DerivedParent :: ctor的Parent :: ctor调用中,基类应该有一个实例的DerivedChild而不是Child。但这需要以某种方式调用虚拟方法,这是禁 ..
发布时间:2020-10-08 20:05:21 C/C++开发

从T构造函数中调用类T的纯虚函数的实现而没有资格吗?

考虑到 T T 成员函数的虚拟调用(直接或间接) >,最多只能归结为 T 的实现,下面的代码是否带有不合格的调用,是否具有未定义的行为? 注意,为避免噪音:如果您认为从构造函数中调用时实际上并未调用成员函数,那么请不要在此处回答或评论,而应在一个单独的SO问题。谢谢。 struct Baze { virtual void foo(); virtual void bar()= ..
发布时间:2020-10-08 19:45:04 C/C++开发

虚函数可以是constexpr吗?

以下代码中的 X :: f()这样的虚拟函数可以吗 struct X { constexpr virtual int f()const { 返回0; } }; 是 constexpr ? 解决方案 从C ++ 20开始,此答案不再正确。 没有从[dcl.constexpr] / 3(7.1.5,“ constexpr 说明符”)开始: ..
发布时间:2020-09-27 20:41:46 C/C++开发

在C ++中最快实现简单,虚拟,观察者排序的模式?

我正在努力尝试使用枚举和大量的宏魔术来为vtables实施替代方案,而这实际上已经开始让我的大脑感到困惑。我开始认为我没有走正确的道路,因为代码变得越来越丑陋,并且无论如何都不适合生产。 如何可以用最少的重定向/操作量来实现以下代码的模式吗? 必须在标准c ++中完成,最多17个。 A类{ virtual void Update()= 0; // A非常纯*¬* }; ..
发布时间:2020-09-27 03:03:44 C/C++开发

从构造函数调用虚函数

我正在阅读 有效的C ++ , “项目9:在构造或销毁过程中切勿调用虚拟函数”。而且我想知道我的代码是否违反了此规则也可以正常使用: 使用命名空间std; A类{ public: A(bool doLog){ if(doLog) log(); } virtual void log(){ cout ..
发布时间:2020-09-26 22:44:39 C/C++开发

提升python:如何调用C ++虚拟函数

我在C ++应用程序中嵌入了python. C ++调用python并将其作为参数传递给C ++对象.该对象具有一些虚函数,并且可以是某些派生类的基类.我如何使boost :: python理解它是一个虚函数? 请考虑以下内容: 在C ++中: class Base { public: virtual void func(); } class Derived { public: ..
发布时间:2020-09-22 18:48:17 C/C++开发

替代的虚函数调用实现?

C ++支持通过虚拟机制进行动态绑定.但是据我了解,虚拟机制是编译器的实现细节,而该标准仅指定了在特定情况下应发生的行为.大多数编译器通过虚拟表和虚拟指针来实现虚拟机制.这与虚拟指针和表的实现细节无关.我的问题是: 除了虚拟指针和虚拟表机制之外,是否有任何编译器以其他方式实现虚拟函数的动态分配?据我所知(通过阅读G ++,Microsoft Visual Studio),大多数人都是通过虚拟 ..
发布时间:2020-07-26 06:20:33 C/C++开发