为什么没有静态QDir :: makepath()?

T3 *_*ica 5 qt reasoning qdir

我知道,要从给定的绝对路径在Qt中创建一个新路径,您可以使用QDir::makepath()as dir.makepath(path),就像在这个问题中所建议的那样.我使用它没有任何问题,它工作正常.我的问题是针对为什么开发人员不会提供静态函数来调用类似的方式QDir::makepath("/Users/me/somepath/");.QDir我不需要创建一个新实例.

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

1.开发人员"懒惰"或没有时间,所以他们没有添加一个,因为它不是绝对必要的.

2.调用QDir它的实例也mkpath(path)将被设置path,因此它可以方便进一步使用 - 但我似乎无法找到任何提示,这是文档中的实际行为.

我知道我重复自己,但同样,我也没有需要帮助的中如何做到这一点,但是我作为很感兴趣,为什么一个人必须这样做的.谢谢你可能错过了任何理由.

ypn*_*nos 4

我们看一下该方法的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

来源: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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

那么为什么不两者都提供呢?

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