![]() |
1
4
你可以用
CRTP
定义
这导致了第一个
|
![]() |
2
7
“结构d1和d2(以及更相似的结构)从b派生以共享公共字段和方法”
那就做
|
![]() |
3
3
与将相等运算符定义为基类的一部分不同,派生类中通常需要两个函数:
或者,通常情况下,您可以使它们成为自由函数:
注:
如果
处理大量任意类型
好吧,也许你有
伟大的!但是这个抓住了 一切 ,这对于 不 应该是可比的。所以我们需要约束。 tl;dr;解决方案下面是一个没有任何代码重复的简单实现(即,适用于任意数量的派生类型):
这个
正如你后来在评论中指出的,并非所有
为什么你会有这个问题鉴于以下情况:
编译器必须找到一个比较运算符,不管是自由函数还是
这是因为找不到更好的比较函数。由于没有其他选择,编译器选择
|
![]() |
4
2
可以从结构的原始定义中删除相等运算符,并将其替换为接受两个相同参数类型的函数模板:
注意,这个函数有点“贪婪”,最好将它放在一个名称空间(与结构一起,以启用adl)中,或者进一步约束如下类型:
(注意
作为最后一个调整,为了防止这种显式实例化:
或者(正如@aconcagua在注释中指出的)类型推导,其中基类引用派生结构,
您可能还想添加
|
![]() |
spicedham · 查找非同级下一个元素 7 年前 |
![]() |
Diego Oriani · 在同级之间传递数据并进行迭代 7 年前 |
![]() |
Dolorosa · jQuery检查是否没有同级具有类 8 年前 |
![]() |
Dss · 如何选择xpath父兄弟?[已关闭] 8 年前 |
![]() |
Mat Walker · XPath返回同一级别上的所有元素 9 年前 |
![]() |
Peter K. · “protected”在PHP中是什么意思? 11 年前 |
|
Starfish777 · jquery按钮事件函数按ID指向目标按钮 11 年前 |
|
John Madden · 带复选框的JQuery下一个同级 12 年前 |