我应该使用什么函数签名来返回对可能不存在的对象的引用?

inn*_*der 5 c++ parameters reference

我在C++中编写一个简单的容器类,类似于存储由键索引的对象的映射.我想提供一个访问器功能,例如:

V& getValue(const K &key);
Run Code Online (Sandbox Code Playgroud)

我在哪里返回对值的引用.

但我也想处理键/值不存在的情况,并能够将某些状态返回给用户(可能有一些原因导致我不想通过某种状态类型与调用者通信).

我想我可以执行以下操作,但调用此方法需要在调用此函数之前构造V对象,并且我只是将内部V对象复制到通过引用传入的对象中,这样看起来很糟糕.

Status getValue(const K &key, V& v);
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

V &getValue(const K &key, Status &s);
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,这似乎有点笨拙,因为焦点被从状态中吸走,用户可能忘记检查它(但也许这不是我的问题).

所以无论如何都有类似的功能

Status getValue(const K &key, V& v);
Run Code Online (Sandbox Code Playgroud)

在调用之前不需要构造虚拟V对象?您无法传递对引用的引用.我想我可以使用指针并且很乐意这样做,但是创建一个简单的使用和推理功能是不太可取的.

有什么想法吗?

And*_*rew 1

boost::optional如果您不想使用 boost,我会使用或创建一个类似的模板。你boost::optional的函数将如下所示:

boost::optional<MyClass &> getValue(const K &key)
Run Code Online (Sandbox Code Playgroud)