c++ - 函数按值返回对象,如果对象不存在则不返回任何对象

标签 c++ qt containers

按值返回类对象的函数的最佳签名是什么,或者如果对象不存在则返回一些特殊的东西?

对于返回多个对象的函数,函数原型(prototype)为

QList<X> getSomeXOrNothing(); 
  • 有对象返回对象列表,没有对象返回空列表,完全符合我的需求,使用起来也很方便。

现在,我知道函数只能返回单个对象或什么都不返回,最好的签名是什么?返回原始指针是不可取的,因为它有可能导致错误泄漏。

我在返回共享指针或仍然返回具有单个值的列表之间进行辩论:

QList<X> getSingleXOrNothing(); 
QSharedPointer<X> getSingleXOrNothing(); 

但我想知道是否有更好的方法来做到这一点——共享指针增加了不必要的开销,而返回列表是有争议的,因为我知道列表只能包含一个对象。

编辑: 所有 QList、SharedPointr 和 QVariant 都是可接受的选项,但我正在为每个字节都很重要的嵌入式设备开发,并且将有很多调用此函数 - 所以试图找到给定条件的最佳容器 - 它是一个对象或什么都没有。

最佳答案

您可以使用“选项模式”。基本思想是:

template <typename T>
class Optional {
    private:
        bool valueIsPresent;
        T value;
}

然后,您可以从函数返回 Optional<YourType> .然后,客户端代码可以在尝试访问和使用值之前检查值是否有效存在。

关于c++ - 函数按值返回对象,如果对象不存在则不返回任何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495067/

相关文章:

c# - C#运算符重载是否像C++一样支持 "+="?

c++ - qmenu 不适用于 MAC (Qt Creator)

c++ - Qt C++ |单击 QListWidget 中的项目时,如何获取链接到索引的字符串数据?

spring - 我们什么时候需要在容器中运行 Java 应用程序?

c++ - 常量类型定义;在 C 和 C++ 中

C++ std::ios_base::failure 异常

c++ - 如何使用 QFileSystemWatcher 监视文件夹的更改

c++ - 大型 Qt Sqlite SELECT 语句

azure - 更改docker ubuntu默认安装路径

c++ - 在没有 std::merge 的情况下合并两个 STL 容器