Class template Dune::XT::Common::ConstStorageProvider<T>

template<class T>
class Dune::XT::Common::ConstStorageProvider<T>

Provides generic (const) access to objects of different origins.

Cosider the following base class which always requires a vector:

struct Base
{
  Base(const std::vector<double>& vec);
};

Consider further a derived class which should be constructible with a given vector as well as without:

struct Derived : public Base
{
  Derived(const std::vector<double>& vec);
  Derived();
};

In the latter case, a vector should be created automatically, which is problematic due to the requirements of Base. The solution is to first derive from ConstStorageProvider or StorageProvider, which handles the management of the vector:

struct Derived
 : private ConstStorageProvider<std::vector<double>>
 , public Base
{
  using VectorProvider = ConstStorageProvider<std::vector<double>>;

  Derived(const std::vector<double>& vec)
    : VectorProvider(vec)
    , Base(VectorProvider::access())
  {}

  Derived()
    : VectorProvider(new std::vector<double>())
    , Base(VectorProvider::access())
};

For the latter to work, ConstStorageProvider (as well as StorageProvider) needs to take ownership of the provided raw pointer.

const T* tt = new T();
{
  ConstStorageProvider<T> provider(tt);
}
const T& derefed_tt = *tt;

Do the following instead:

const T* tt = new T();
{
  ConstStorageProvider<T> provider(*tt);
}
const T& derefed_tt = *tt;

Warning

ConstStorageProvider (as well as StorageProvider) takes ownership of the provided raw pointer. Thus, the following code is supposed to fail:

Method Dune::XT::Common::ConstStorageProvider::operator=

template<class T>
ConstStorageProvider<T> &Dune::XT::Common::ConstStorageProvider<T>::operator=(const ConstStorageProvider<T> &other)

No documentation provided.

Method Dune::XT::Common::ConstStorageProvider::operator=

template<class T>
ConstStorageProvider<T> &Dune::XT::Common::ConstStorageProvider<T>::operator=(ConstStorageProvider<T> &&source) noexcept = default

No documentation provided.

Method Dune::XT::Common::ConstStorageProvider::valid

template<class T>
bool Dune::XT::Common::ConstStorageProvider<T>::valid() const

No documentation provided.

Method Dune::XT::Common::ConstStorageProvider::access

template<class T>
const T &Dune::XT::Common::ConstStorageProvider<T>::access() const

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider()

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(const T &tt)

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(T *&&tt)

Warning

This ctor transfers ownership to ConstStorageProvider, do not delete tt manually!

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(std::shared_ptr<const T> tt)

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(std::unique_ptr<const T> &&tt)

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(const ConstStorageProvider<T> &other)

No documentation provided.

Constructor Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(ConstStorageProvider<T> &&source) noexcept = default

No documentation provided.

Field Dune::XT::Common::ConstStorageProvider::storage_

template<class T>
std::unique_ptr<const internal::ConstAccessInterface<T>> Dune::XT::Common::ConstStorageProvider<T>::storage_

No documentation provided.

Function template Dune::XT::Common::ConstStorageProvider::ConstStorageProvider

template<class T>
template<class S, typename = require_t<std::is_constructible_v<T, S&&> && !is_self_v<ConstStorageProvider<T>, S>>>
explicit Dune::XT::Common::ConstStorageProvider<T>::ConstStorageProvider(S &&tt)

No documentation provided.

Function template Dune::XT::Common::ConstStorageProvider::make

template<class T>
template<typename ...Args>
static ConstStorageProvider<T> Dune::XT::Common::ConstStorageProvider<T>::make(Args&&... args)

No documentation provided.