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

7

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

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

1.开发人员“懒惰”或者没有时间添加一个,因为这不是绝对必要的。

2. 在调用mkpath(path)QDir实例中,将设置为path,这样对于进一步的使用会很方便-但我似乎找不到任何提示表明这是docs中的实际行为。

我知道我在重复自己,但再次强调,我不需要关于如何执行此操作的帮助,但我非常想知道为什么必须以这种方式执行。感谢您提供可能被我忽略的任何原因。

1个回答

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);
}

来源: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);之间的区别很小。创建对象的性能损失也可以忽略不计,因为如果您经常执行操作,则会重复使用相同的对象。但是对于代码维护人员来说,不维护同一个方法的两个版本可能更方便(工作量更少,出错的可能性更小)。


正如我所指出的,并且在文档中还给出了另一种方法的示例,您可以将其写成单行代码 QDir().makepath(path); - ypnos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接