![]() |
1
2
我不确定我是否理解你的要求,但看来你错过了关键的CRTP演员:
如果T没有声明它自己的func,这将是无限递归,因为self.func将找到一个<T>::func。即使T的派生类(例如下面的DV)声明了自己的func,但T没有声明,这也是正确的。 使用不同的最终重写器进行测试,以显示公布的分派工作:
|
![]() |
2
1
有点矛盾,不是吗?A类用户可能对B或C一无所知。如果你提到A,唯一知道
获取直接函数调用(或内联)的唯一方法是使用非虚拟函数,并且不通过基类指针进行间接寻址。
编辑:我认为Scala中的习惯用法是
|
![]() |
3
1
在您的特定示例中,不需要动态分派,因为
如果你打电话来
从
|
![]() |
4
1
正如其他人所注意到的,很难理解这个问题,但它让我想起了很久以前学过的东西,所以回答你的问题还有很长的路要走:
鉴于此,这取决于
这会不会正好回答你的问题? |
![]() |
5
0
是否动态调度函数取决于两个因素: a)对象表达式是引用类型还是指针类型 b)函数(重载解析解析为的函数)是否为虚函数。 现在来看看你的代码:
简而言之,“func”不是动态调度的。 注意::禁止虚拟函数调用机制。
OP2中的代码出错,因为只有当“Y”是“X”范围内的静态成员时,语法X::Y才能用于调用“X”范围内的“Y”。 |
![]() |
6
-1
似乎你只需要添加一些跟踪和用法来回答你自己的问题。。。
输出:
结论:A确实具有B's函数的虚性。 |
|
simply lemon · python上链表的添加方法 11 月前 |
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
![]() |
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
![]() |
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
![]() |
Andy Votava · 从父类定义调用学生方法 1 年前 |