Interface function IEntityRepository::Get is returning an optional reference to query an IEntity.
In order to check whether an IEntity with a certain name/id exists, function IEntityRepository::Contains could be used to query this information. If IEntityRepository::Get is called on a non-existing name/id, the function would throw, so for defensive programming reasons a IEntityRepository::Contains should always be done before actually calling IEntityRepository::Get. The good thing about plain old C-pointers is that assignment and existence check can be done in one call. Since C++17 the same functionality is managed by std::optional.
Another disadvantage of using a plain reference to IEntity is when it is used as a class member, where it needs to be initialized when an object of that class is defined. It might be that during construction time this IEntity is not known/existing yet. Of cource, a plain old C-pointer could be used in this case, but it wouldn't be a consistant usage.
The proposal is to use std::optional<std::reference_wrapper<IEntity>> as return value for IEntityRepository::Get.
Signed-off-by:
Jupp Tscheak <jupp.tscheak@daimler.com>
parent
de97eb02
No related branches found
No related tags found
Please register or sign in to comment