diff options
Diffstat (limited to 'include/estd/ReferenceHolder.hpp')
-rw-r--r-- | include/estd/ReferenceHolder.hpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/include/estd/ReferenceHolder.hpp b/include/estd/ReferenceHolder.hpp new file mode 100644 index 0000000..2bb4602 --- /dev/null +++ b/include/estd/ReferenceHolder.hpp @@ -0,0 +1,61 @@ +/** + * \file + * \brief ReferenceHolder template class header. + * + * \author Copyright (C) 2014-2016 Kamil Szczygiel http://www.distortec.com http://www.freddiechopin.info + * + * \par License + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not + * distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef ESTD_REFERENCEHOLDER_HPP_ +#define ESTD_REFERENCEHOLDER_HPP_ + +namespace estd +{ + +/** + * \brief ReferenceHolder template class is a ROMable holder of a reference. + * + * \tparam T is the type of reference held in the object + */ + +template<typename T> +class ReferenceHolder +{ +public: + + /** + * \brief ReferenceHolder constructor. + * + * \param [in] reference is a reference that will be held by the object + */ + + constexpr explicit ReferenceHolder(T& reference) noexcept : + reference_{reference} + { + + } + + /// \return reference held by the object + constexpr operator T&() const noexcept + { + return reference_; + } + + /// \return reference held by the object + constexpr T& get() const noexcept + { + return reference_; + } + +private: + + /// reference held by the object + T& reference_; +}; + +} // namespace estd + +#endif // ESTD_REFERENCEHOLDER_HPP_ |