首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有静态QDir::makepath()?

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

Stack Overflow用户
提问于 2015-10-07 18:58:14
回答 1查看 1.9K关注 0票数 7

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

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

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

2. --调用mkpath(path)QDir实例--也将被设置为path,因此方便进一步使用--但我似乎找不到任何迹象表明这是文档中的实际行为。

我知道我重复了一遍,但我再次重申,我不需要在如何做这方面的帮助,但我非常感兴趣的是,为什么一个人必须这样做。谢谢,因为任何原因我都可能错过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 15:55:38

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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);之间的差别很小。创建对象的性能影响也可以忽略不计,因为如果您更频繁地执行操作,您将重用同一个对象。但是在代码维护人员方面,可以说,不维护同一方法的两个版本更方便(工作量更小,错误更少)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33000300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档