在此处找到:https://github.com/tpaviot/oce/blob/master/src/BRepAdaptor/BRepAdaptor_Curve.cxx
我想知道的是:
((GeomAdaptor_Curve*) (void*) &myCurve)->Load(C,First,Last);
myCurve
已定义为GeomAdaptor_Curve
。所以看起来它正在指向myCurve
作为void*
的指针,然后将 作为GeomAdaptor_Curve*
投射,然后取消引用它并调用{{1} }} 在上面。可能有什么理由这样做,而不是简单地调用Load
?
答案 0 :(得分:6)
请注意,该语句出现在const
成员函数中。因此&myCurve
的类型实际上是GeomAdaptor_Curve const*
。这似乎是一种丑陋而令人困惑的说法
const_cast<GeomAdaptor_Curve&>(myCurve).Load(C,First,Last);
并且可能已经变得更加复杂,以便“避免”尝试使用C风格的强制转换来绕过const
而获得的编译器警告。
答案 1 :(得分:0)
我能想到的唯一原因是确保GeomAdaptor_Curve
&#34;的类型&#34;子类的变量。被迫调用超类的Load
函数。
转换为void*
,然后转到GeomAdaptor_Curve*
,可以保证该类型被视为后者,无论其实际类型如何。
在查看了代码之后,我无法确定这是一种可能性,因此它可能是遗留代码或者他们未来扩展的内容。
可能值得联系GitHub上的dbarbier
用户,因为他们似乎对变更负有全部责任(基于历史记录)。
虽然,因为那段代码似乎是最早的GitHub版本,如果你能找到它们,原作者可能是更好的选择(参见一个Remi LEQUETTE的文件头)。