Gromacs  2024.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions
gmx::Any Class Reference

#include <gromacs/utility/include/gromacs/utility/any.h>

Description

Represents a dynamically typed value of an arbitrary type - deprecated.

New uses of this type should be avoided - prefer std::any or std::variant.

To create an Any, either initialize it as empty, or with the create() method (or the equivalent constructor, if the type parameter can be deduced and is clear to the reader from the context).

To query the type of the contents in the any, use isEmpty(), type(), and isType().

To access the value, you need to know the type as a compile-time constant (e.g., through branching based on isType()), and then use cast() or tryCast().

Methods in this class do not throw unless otherwise indicated.

This provides essentially the same functionality as boost::any.

It would be good to replace the current uses of this type with std::any or std::variant, but see https://gitlab.com/gromacs/gromacs/-/issues/3951 for discussion about the things that have blocked such attempts.

Public Member Functions

 Any ()
 Creates an empty any value.
 
template<typename T , typename = std::enable_if_t<!std::is_same<T, Any>::value>>
 Any (T &&value)
 Creates a any that holds the given value. More...
 
 Any (const Any &other)
 Creates a deep copy of a any. More...
 
 Any (Any &&other) noexcept
 Move-constructs a any.
 
Anyoperator= (const Any &other)
 Assigns the any. More...
 
Anyoperator= (Any &&other) noexcept
 Move-assigns the any.
 
bool isEmpty () const
 Whether any value is stored.
 
std::type_index type () const
 Returns the dynamic type of the value that is currently stored.
 
template<typename T >
bool isType () const
 Returns whether the type stored matches the template parameter.
 
template<typename T >
const T * tryCast () const
 Tries to get the value as the given type. More...
 
template<typename T >
const T & cast () const
 Gets the value when the type is known. More...
 
template<typename T >
T * tryCastRef ()
 Tries to get the value as the given type as a non-const pointer. More...
 
template<typename T >
T & castRef ()
 Gets the value when the type is known as a modifiable reference. More...
 

Static Public Member Functions

template<typename T >
static Any create (const T &value)
 Creates a any that holds the given value. More...
 
template<typename T >
static Any create (T &&value)
 Creates a any that holds the given value. More...
 

Constructor & Destructor Documentation

template<typename T , typename = std::enable_if_t<!std::is_same<T, Any>::value>>
gmx::Any::Any ( T &&  value)
inlineexplicit

Creates a any that holds the given value.

Exceptions
std::bad_allocif out of memory.
gmx::Any::Any ( const Any other)
inline

Creates a deep copy of a any.

Exceptions
std::bad_allocif out of memory.

Member Function Documentation

template<typename T >
const T& gmx::Any::cast ( ) const
inline

Gets the value when the type is known.

Template Parameters
TType to get (which must match what the any stores).

Asserts if the any is empty or does not contain the requested type.

template<typename T >
T& gmx::Any::castRef ( )
inline

Gets the value when the type is known as a modifiable reference.

Template Parameters
TType to get (which must match what the any stores).

Asserts if the any is empty or does not contain the requested type.

template<typename T >
static Any gmx::Any::create ( const T &  value)
inlinestatic

Creates a any that holds the given value.

Exceptions
std::bad_allocif out of memory.

This method allows explicitly specifying the template argument, contrary to the templated constructor.

template<typename T >
static Any gmx::Any::create ( T &&  value)
inlinestatic

Creates a any that holds the given value.

Exceptions
std::bad_allocif out of memory.

In addition to allowing specifying the template argument, this method avoids copying when move-construction is possible.

Any& gmx::Any::operator= ( const Any other)
inline

Assigns the any.

Exceptions
std::bad_allocif out of memory.
template<typename T >
const T* gmx::Any::tryCast ( ) const
inline

Tries to get the value as the given type.

Template Parameters
TType to get.
Returns
Pointer to the value, or nullptr if the type does not match the stored value.
template<typename T >
T* gmx::Any::tryCastRef ( )
inline

Tries to get the value as the given type as a non-const pointer.

Template Parameters
TType to get.
Returns
Pointer to the value, or nullptr if the type does not match the stored value.

This method allows modifying the value in-place, which is useful with more complicated data structures.


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