Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ROOT::RResult< T > Class Template Reference

template<typename T>
class ROOT::RResult< T >

The class is used as a return type for operations that can fail; wraps a value of type T or an RError.

The RResult<T> class and their related classes are used for call chains that can throw exceptions, such as I/O code paths. Throwing of the exception is deferred to allow for if (result) style error checking where it makes sense. If an RResult in error state leaves the scope unchecked, it will throw.

A function returning an RResult might look like this:

{
int rv = syscall(...);
if (rv == -1)
return R__FAIL("user-facing error message");
if (rv == kShortcut)
return 42;
}
#define R__FORWARD_RESULT(res)
Short-hand to return an RResult<T> value from a subroutine to the calling stack frame.
Definition RError.hxx:301
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
Definition RError.hxx:299
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.

Code using MyIOFunc might look like this:

if (!result) {
// custom error handling or result.Throw()
}
switch (result.Inspect()) {
...
}
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result

Note that RResult<void> can be used for a function without return value, like this

{
if (failure)
return R__FAIL("user-facing error messge");
}
The class is used as a return type for operations that can fail; wraps a value of type T or an RError...
Definition RError.hxx:197

RResult<T>::Unwrap() can be used as a short hand for "give me the wrapped value or, in case of an error, throw". For instance:

int value = FuncThatReturnsRResultOfInt().Unwrap(); // may throw
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value

There is no implicit operator that converts RResult<T> to T. This is intentional to make it clear in the calling code where an exception may be thrown.

Definition at line 197 of file RError.hxx.

Public Member Functions

 RResult (const RResult &other)=delete
 
 RResult (const T &value)
 
 RResult (RError &&error)
 
 RResult (RResult &&other)=default
 
 RResult (T &&value)
 
 ~RResult ()=default
 
RResultForward (RError::RLocation &&sourceLocation)
 Used by R__FORWARD_RESULT in order to keep track of the stack trace in case of errors.
 
std::optional< RErrorGetError () const
 
const T & Inspect ()
 If the operation was successful, returns a const reference to the inner type.
 
 operator bool ()
 
RResultoperator= (const RResult &other)=delete
 
RResultoperator= (RResult &&other)=default
 
void Throw ()
 Throws an RException with fError.
 
Unwrap ()
 If the operation was successful, returns the inner type by value.
 

Static Public Member Functions

static RError ForwardError (RResultBase &&result, RError::RLocation &&sourceLocation)
 Used by R__FORWARD_ERROR in order to keep track of the stack trace.
 

Protected Member Functions

bool Check ()
 Used by the RResult<T> bool operator.
 

Protected Attributes

std::unique_ptr< RErrorfError
 This is the nullptr for an RResult representing success.
 
bool fIsChecked {false}
 Switches to true once the user of an RResult object checks the object status.
 

Private Member Functions

void ThrowOnError ()
 

Private Attributes

std::optional< T > fValue
 The result value, only present in case of successful execution.
 

#include <ROOT/RError.hxx>

Inheritance diagram for ROOT::RResult< T >:
ROOT::RResultBase

Constructor & Destructor Documentation

◆ RResult() [1/5]

template<typename T >
ROOT::RResult< T >::RResult ( const T & value)
inline

Definition at line 218 of file RError.hxx.

◆ RResult() [2/5]

template<typename T >
ROOT::RResult< T >::RResult ( T && value)
inline

Definition at line 219 of file RError.hxx.

◆ RResult() [3/5]

template<typename T >
ROOT::RResult< T >::RResult ( RError && error)
inline

Definition at line 220 of file RError.hxx.

◆ RResult() [4/5]

template<typename T >
ROOT::RResult< T >::RResult ( const RResult< T > & other)
delete

◆ RResult() [5/5]

template<typename T >
ROOT::RResult< T >::RResult ( RResult< T > && other)
default

◆ ~RResult()

template<typename T >
ROOT::RResult< T >::~RResult ( )
default

Member Function Documentation

◆ Check()

bool ROOT::RResultBase::Check ( )
inlineprotectedinherited

Used by the RResult<T> bool operator.

Definition at line 108 of file RError.hxx.

◆ Forward()

template<typename T >
RResult & ROOT::RResult< T >::Forward ( RError::RLocation && sourceLocation)
inline

Used by R__FORWARD_RESULT in order to keep track of the stack trace in case of errors.

Definition at line 230 of file RError.hxx.

◆ ForwardError()

static RError ROOT::RResultBase::ForwardError ( RResultBase && result,
RError::RLocation && sourceLocation )
inlinestaticinherited

Used by R__FORWARD_ERROR in order to keep track of the stack trace.

Definition at line 128 of file RError.hxx.

◆ GetError()

std::optional< RError > ROOT::RResultBase::GetError ( ) const
inlineinherited

Definition at line 122 of file RError.hxx.

◆ Inspect()

template<typename T >
const T & ROOT::RResult< T >::Inspect ( )
inline

If the operation was successful, returns a const reference to the inner type.

If there was an error, Inspect() instead throws an exception.

Definition at line 239 of file RError.hxx.

◆ operator bool()

template<typename T >
ROOT::RResult< T >::operator bool ( )
inlineexplicit

Definition at line 258 of file RError.hxx.

◆ operator=() [1/2]

template<typename T >
RResult & ROOT::RResult< T >::operator= ( const RResult< T > & other)
delete

◆ operator=() [2/2]

template<typename T >
RResult & ROOT::RResult< T >::operator= ( RResult< T > && other)
default

◆ Throw()

void ROOT::RResultBase::Throw ( )
inherited

Throws an RException with fError.

Definition at line 61 of file RError.cxx.

◆ ThrowOnError()

template<typename T >
void ROOT::RResult< T >::ThrowOnError ( )
inlineprivate

Definition at line 203 of file RError.hxx.

◆ Unwrap()

template<typename T >
T ROOT::RResult< T >::Unwrap ( )
inline

If the operation was successful, returns the inner type by value.

For move-only types, Unwrap can only be called once, as it yields ownership of the inner value to the caller using std::move, potentially leaving the RResult in an unspecified state.

If there was an error, Unwrap() instead throws an exception.

Definition at line 252 of file RError.hxx.

Member Data Documentation

◆ fError

std::unique_ptr<RError> ROOT::RResultBase::fError
protectedinherited

This is the nullptr for an RResult representing success.

Definition at line 100 of file RError.hxx.

◆ fIsChecked

bool ROOT::RResultBase::fIsChecked {false}
protectedinherited

Switches to true once the user of an RResult object checks the object status.

Definition at line 102 of file RError.hxx.

◆ fValue

template<typename T >
std::optional<T> ROOT::RResult< T >::fValue
private

The result value, only present in case of successful execution.

Definition at line 200 of file RError.hxx.


The documentation for this class was generated from the following file: