Pregunta

Estoy intentando actualizar algunos CRIRA-2003 Kit de E/S Código y estoy corriendo a algo extraño: hay algunos lugares donde los métodos se declaran como puros virtuales solo si el __LP64__ Se establece la macro del preprocesador. Ejemplo de IOBLOCKSTOREGEGEVICE:

public
#ifdef __LP64__
    virtual IOReturn    getWriteCacheState(bool *enabled)   = 0;
#else /* !__LP64__ */
    virtual IOReturn    getWriteCacheState(bool *enabled); /* 10.3.0 */
#endif /* !__LP64__ */

En el ejemplo anterior, ¿por qué forzar la implementación de GetWriteCachestatus en> = 10.4 pero no en 10.3? ¿Es solo un caso de "Deberíamos haber hecho esto antes" o hay algo más profundo que no estoy viendo (que generalmente es el caso)?

¿Fue útil?

Solución

Supongo que la versión de 32 bits incluye una implementación predeterminada para recurrir a los controladores escritos antes de que se introduzca el método. Dado que nunca hubo una versión de 64 bits de OSX que no incluía ese método, no necesitan proporcionar una alternativa. He visto patrones similares en otras partes de IOKIT para nuevos métodos que reemplazan a los métodos en desuso. El método en desuso solo existe en modo de 32 bits y, por defecto, llama al nuevo método. El nuevo método es puro virtual en modo de 64 bits.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top