static absl::StatusOr<ImageFrame> ReadTextureFromFile() {
ImageFrame image_frame(width, height);
return image_frame;
}
Why return type is ImageFrame
and not absl::StatusOr<ImageFrame>
?
The return type is absl::StatusOr<ImageFrame>
as specified in the signature of the function.
But looking at the definition of absl::StatusOr
, there is a converting constructor that moves an object of type T
into a absl::StatusOr<T>
so your code is executed as if you wrote
static absl::StatusOr<ImageFrame> ReadTextureFromFile() {
ImageFrame image_frame(width, height);
// Call absl::StatusOr(U&&)
absl::StatusOr<ImageFrame> returnValue{ image_frame };
return returnValue;
}
This is just a "syntactic sugar". The return type is
abseil::StatusOr<ImageFrame>
.abseil::StatusOr<T>
allows you to return bothabseil::Status
and the typeT
from your function. When there is an error you can directly return the error status. On success, you return the object with typeT
.So you could also write something like that:
When you call this function, you need to check if everything went smooth.