Skip to content
Snippets Groups Projects
Commit 7a4dbe08 authored by Carsten Gräser's avatar Carsten Gräser
Browse files

[cleanup] Move PriorityTag to typeutilities.hh

This removed the recently added prioritytag.hh
header again. Having a separate header for each
of these trivial helpers will only clutter the
directory and make people lookup the correct
header more often.
parent a247658f
No related branches found
No related tags found
No related merge requests found
......@@ -76,7 +76,6 @@ install(FILES
poolallocator.hh
power.hh
precision.hh
prioritytag.hh
propertymap.hh
promotiontraits.hh
proxymemberaccess.hh
......
......@@ -70,7 +70,6 @@ commoninclude_HEADERS = \
poolallocator.hh \
power.hh \
precision.hh \
prioritytag.hh \
promotiontraits.hh \
propertymap.hh \
proxymemberaccess.hh \
......
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_COMMON_PRIORITYTAG_HH
#define DUNE_COMMON_PRIORITYTAG_HH
#include <cstddef>
namespace Dune {
/**
* \ingroup TypeUtilities
*
* @{
*/
/**
* \brief Helper class for tagging priorities.
*
* When using multiple overloads of a function
* where some are removed from the overload set
* via SFINAE, the remaining overloads may be ambiguous.
* A prototypic example would be a default overload
* that should be used if the others do not apply.
*
* By adding additional arguments of type PriorityTag<k>
* with increasing priority k to all overloads and calling
* the method with PriorityTag<m> where m is larger or equal
* to the maximal used priority, those can be made unambiguous.
*
* In this case the matching overload with highest priority
* will be used. This is achieved by the fact that PriorityTag<k>
* derives from all types PriorityTag<i> with i les than k.
*
* \tparam priority The priority of this tag.
*/
template<std::size_t priority>
struct PriorityTag : public PriorityTag<priority-1>
{};
/**
* \brief Helper class for tagging priorities.
*
* PriorityTag<0> does not derive from any
* other PriorityTag.
*/
template<>
struct PriorityTag<0>
{};
/**
* @}
*/
}
#endif // DUNE_COMMON_PRIORITYTAG_HH
......@@ -3,6 +3,7 @@
#ifndef DUNE_COMMON_TYPEUTILITIES_HH
#define DUNE_COMMON_TYPEUTILITIES_HH
#include <cstddef>
#include <type_traits>
#include <tuple>
......@@ -32,6 +33,46 @@ namespace Dune {
/**
* \brief Helper class for tagging priorities.
*
* \ingroup TypeUtilities
*
* When using multiple overloads of a function
* where some are removed from the overload set
* via SFINAE, the remaining overloads may be ambiguous.
* A prototypic example would be a default overload
* that should be used if the others do not apply.
*
* By adding additional arguments of type PriorityTag<k>
* with increasing priority k to all overloads and calling
* the method with PriorityTag<m> where m is larger or equal
* to the maximal used priority, those can be made unambiguous.
*
* In this case the matching overload with highest priority
* will be used. This is achieved by the fact that PriorityTag<k>
* derives from all types PriorityTag<i> with i les than k.
*
* \tparam priority The priority of this tag.
*/
template<std::size_t priority>
struct PriorityTag : public PriorityTag<priority-1>
{};
/**
* \brief Helper class for tagging priorities.
*
* \ingroup TypeUtilities
*
* PriorityTag<0> does not derive from any
* other PriorityTag.
*/
template<>
struct PriorityTag<0>
{};
} // namespace Dune
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment