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

时间:2015-10-07 18:58:14

标签: qt reasoning qdir

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

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

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

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

我知道我会重复自己,但是再一次, 需要 的帮助,但我对为什么<感兴趣/ em>一个人必须这样做。 非常感谢,我可能错过了。

1 个答案:

答案 0 :(得分:3)

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

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已指向)。

那为什么不提供两者?

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