【问题标题】:OS X: why does __LP64__ lead to pure virtual functions?OS X:为什么 __LP64__ 会导致纯虚函数?
【发布时间】:2011-05-04 13:52:14
【问题描述】:

我正在尝试更新一些大约 2003 年的 I/O Kit 代码,但我遇到了一些奇怪的事情:只有在设置了 __LP64__ 预处理器宏的情况下,才会在某些地方将方法声明为纯虚拟。例如,来自IOBlockStorageDevice:

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

在上面的例子中,为什么在>=10.4而不是10.3强制执行getWriteCacheStatus?这只是“我们以前应该这样做过”的情况,还是我没有看到更深层次的东西(通常是这种情况)。

【问题讨论】:

    标签: macos 64-bit iokit pure-virtual


    【解决方案1】:

    我的猜测是 32 位版本包含一个默认实现,以供在引入该方法之前编写的驱动程序使用。由于从来没有一个 64 位版本的 OSX 不包含该方法,因此它们不需要提供后备。我在 IOKit 的其他部分看到了类似的模式,用于取代已弃用的方法的新方法。不推荐使用的方法仅存在于 32 位模式下,默认情况下会调用新方法。新方法在 64 位模式下是纯虚拟的。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2011-01-10
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2017-10-30
      相关资源
      最近更新 更多