Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
Resource Mgmt RI11 Sp 41
-
3
Description
In MESOS-2757 we introduced T* operator-> for Option, Future and Try. This provided a convenient short-hand for existing member functions T& get providing identical functionality.
To finalize the work of MESOS-2757 we should replace the existing T& get() member functions with functions T& operator*.
This is desirable as having both operator-> and get in the code base at the same time lures developers into using the old-style get instead of operator-> where it is not needed, e.g.,
m.get().fun();
instead of
m->fun();
We still require the functionality of get to directly access the contained value, but the current API unnecessarily conflates two (at least from a usage perspective) unrelated aspects; in these instances, we should use an operator* instead,
void f(const T&); Try<T> m = ..; f(*m); // instead of: f(m.get());
Using operator* in these instances makes it much less likely that users would use it in instances when they wanted to call functions of the wrapped value, i.e.,
m->fun();
appears more natural than
(*m).fun();
Note that this proposed change is in line with the interface of std::optional. Also, std::shared_ptr's get is a useful function and implements an unrelated interface: it surfaces the wrapped pointer as opposed to its operator* which dereferences the wrapped pointer. Similarly, our current get also produce values, and are unrelated to std::shared_ptr's get.
Attachments
Issue Links
- is related to
-
MESOS-2757 Add -> operator for Option<T>, Try<T>, Result<T>, Future<T>.
- Resolved
- relates to
-
MESOS-9617 Lint to catch uses of get where operator* should be used.
- Open