为什么没有static QDir::makepath()?

Why is there no static QDir::makepath()?

我知道,要从给定的绝对路径在 Qt 中创建新路径,您可以使用 QDir::makepath() 作为 dir.makepath(path),正如 this 问题中所建议的那样。我在使用它时没有遇到任何问题,而且效果很好。我的问题是直接的,关于 为什么 开发人员不会提供静态函数以像 QDir::makepath("/Users/me/somepath/"); 这样的方式调用。需要创建一个新的 QDir 实例对我来说似乎没有必要。

我只能想到两个可能的原因:

1. 开发者 "lazy" 或没有时间,所以他们没有添加一个,因为这不是绝对必要的。

2. 调用 mkpath(path)QDir 实例也将设置为 path,因此它会方便进一步使用 - 但我似乎找不到任何提示表明这是 docs.

中的实际行为

我知道我重复了一遍,但我确实 不需要 需要帮助 如何 去做,但我很多对 为什么 必须这样做感兴趣。 感谢我可能错过的任何原因。

让我们看一下上述方法的代码:

bool QDir::mkdir(const QString &dirName) const
{
    const QDirPrivate* d = d_ptr.constData();

    if (dirName.isEmpty()) {
        qWarning("QDir::mkdir: Empty or null file name");
        return false;
    }

    QString fn = filePath(dirName);
    if (d->fileEngine.isNull())
        return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
    return d->fileEngine->mkdir(fn, false);
}

来源:http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n1381

正如我们所见,静态版本很容易实现:

bool QDir::mkdir(const QString &dirName) const
{
    if (dirName.isEmpty()) {
        qWarning("QDir::mkdir: Empty or null file name");
        return false;
    }

    return QFileSystemEngine::createDirectory(QFileSystemEntry(dirName), false);
}

(另见 http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n681

首先,非静态方法有几个优点。显然,使用对象的现有文件引擎是有好处的。而且,我会想象在特定目录下创建多个目录的用例(QDir 已经指向)。

那么为什么不同时提供两者呢?

Verdict (tl/dr): 我认为原因很简单,代码卫生。当您使用 API 时,QDir::makepath(path);QDir().makepath(path); 之间的区别很小。创建对象对性能的影响也可以忽略不计,因为如果您碰巧更频繁地执行该操作,您将重用同一个对象。但在代码维护者方面,维护同一方法的两个版本可以说更方便(工作量更少,更不容易出错)。