OS X:__LP64__が純粋な仮想関数につながるのはなぜですか?
-
28-10-2019 - |
質問
2003年頃のいくつかの更新を試みています I/Oキット コードと私は奇妙なものに実行されています。 __LP64__
プリプロセッサマクロが設定されています。例、から ioblockstoragevice:
public
#ifdef __LP64__
virtual IOReturn getWriteCacheState(bool *enabled) = 0;
#else /* !__LP64__ */
virtual IOReturn getWriteCacheState(bool *enabled); /* 10.3.0 */
#endif /* !__LP64__ */
上記の例では、なぜ> = 10.4でgetwritecachestatusの実装を強制しますが、10.3ではそうではありませんか?これは、「私たちはこれを前にやるべきだった」というケースですか、それとも私が見ていないより深いものがありますか(通常はそうです)。
解決
私の推測では、32ビットバージョンには、メソッドが導入される前に書かれたドライバーのデフォルトの実装が含まれています。その方法が含まれていないOSXの64ビットバージョンがなかったため、フォールバックを提供する必要はありません。 Iokitの他の部分で、廃止された方法に取って代わる新しい方法について、同様のパターンを見てきました。非推奨メソッドは32ビットモードでのみ存在し、デフォルトでは新しい方法を呼び出します。新しい方法は、64ビットモードで純粋な仮想です。
所属していません StackOverflow