23得票6回答
C++中vtable查找的性能影响

我正在评估将一款实时软件从C/汇编语言重写为C++/汇编语言(原因与问题无关的部分必须以汇编语言完成)。 每秒有3,000次中断,对于每个中断,需要按照顺序执行大约200个不同的操作。处理器运行速度为300 MHz,给我们100,000个周期来完成这项工作。通过一个函数指针数组,在C语言中已...

9得票3回答
覆盖虚方法时缺少返回类型协变的解决方法

有没有办法在C#中“黑客”或“强制执行”协变重写?例如: public class Alpha { public virtual Alpha DoSomething() { return AlphaFactory.GetAlphaFromSomewhere(); ...

26得票4回答
在C语言中的动态方法调用

我知道这听起来很傻,也知道C语言不是面向对象的语言。 但是有没有办法在C语言中实现动态方法调度? 我考虑过使用函数指针,但不能完全理解这个想法。 我应该如何实现呢?

8得票5回答
虚表和_vptr存储方案

有人能解释一下不同类的虚拟表是如何存储在内存中的吗?当我们使用指针调用函数时,它们如何使用地址位置来调用函数?我们可以使用类指针获取这些虚拟表内存分配大小吗?我想看看一个类的虚拟表使用了多少内存块。我该如何查看? class Base { public: FunctionPointe...

7得票4回答
从V表调用虚函数

作为C++中的所有虚函数都存储在V表中,因此覆盖发生在虚函数的情况下。 我想问是否有办法直接从表格调用虚函数,并能够确定V表包含哪些函数。

7得票2回答
将EXE作为DLL加载,本地vftable

我有一个名为 test.exe 的可执行文件,通常作为独立应用程序使用。我想将这个可执行文件作为模块(dll)嵌入到另一个应用程序 app.exe 中。 test.exe 中的代码非常简单,例如: void doTest() { MyClass *inst = new MyClas...

16得票8回答
为什么vptr不是静态的?

每个包含一个或多个虚函数的类都有与之关联的 Vtable。一个名为 vptr 的 void 指针指向该 vtable。该类的每个对象都包含指向相同 Vtable 的 vptr。那么为什么 vptr 不是静态的?为什么不把它与类相关联,而是将其与对象相关联呢?

8得票4回答
C++中的纯虚函数位于哪里?

纯虚函数位于哪个虚表中?是在基类还是派生类中? 例如,每个类中的虚表是什么样子的? class Base { virtual void f() =0; virtual void g(); } class Derived: public Base{ virtual voi...

33得票3回答
为什么虚函数不能使用返回类型推断?

n3797 文件的 § 7.1.6.4/14 节: 使用占位类型作为返回类型声明的函数不得是虚函数 (10.3)。 因此,以下程序是非法的:struct s { virtual auto foo() { } }; 关于这个原理,我所能找到的只有来自n3638...

8得票1回答
非多态类型上的dynamic_cast

我能理解为什么在这种情况下 dynamic_cast 起作用: #include <iostream> struct A{ virtual ~A() = default; }; struct B { virtual ~B() = default; }; st...