Traits for types with a tag.
More...
Classes | |
| struct | util::TaggedType< T, Tag > |
| A type with a specified tag. More... | |
| struct | util::add_tag< T, Tag > |
| struct | util::remove_tag< Tagged > |
Trait holding the type contained in a TaggedType (or the type itself). More... | |
| struct | util::remove_tag< TaggedType< T, Tag > > |
| struct | util::TagN<... > |
| Tag class parametrized by a sequence of numbers. More... | |
| struct | util::TagExtractor< Tagged > |
| Extracts the tag from a type. More... | |
Typedefs | |
| template<typename T , typename Tag > | |
| using | util::add_tag_t = typename add_tag< T, Tag >::type |
| template<typename Tagged > | |
| using | util::remove_tag_t = typename remove_tag< Tagged >::type |
Direct access to the type contained in remove_tag. More... | |
| template<typename Tagged > | |
| using | util::tag_of = TagExtractor< Tagged > |
Trait holding the tag of Tagged as type. More... | |
| template<typename Tagged > | |
| using | util::tag_of_t = typename tag_of< Tagged >::type |
Direct access to the type in tag_of. More... | |
| template<typename SrcTuple > | |
| using | util::extract_tags = extract_to_tuple_type< SrcTuple, TagExtractor > |
Returns a tuple with all the tags from SrcTuple. More... | |
| template<typename SrcTuple > | |
| using | util::extract_tags_t = typename extract_tags< SrcTuple >::type |
Direct access to the type in extract_tags. More... | |
| template<typename Tag , typename Tuple > | |
| using | util::index_of_tag = index_of_extracted_type< TagExtractor, Tag, Tuple > |
Trait holding the index of the element of Tuple with tag Tag. More... | |
| template<typename Tag , typename Tuple > | |
| using | util::type_with_tag = type_with_extracted_type< TagExtractor, Tag, Tuple > |
Trait holding the type of the element of Tuple with tag Tag. More... | |
| template<typename Tag , typename Tuple > | |
| using | util::type_with_tag_t = typename type_with_tag< Tag, Tuple >::type |
Direct access to the value in type_with_tag. More... | |
| template<typename Tag , typename Tuple > | |
| using | util::has_tag = has_extracted_type< TagExtractor, Tag, Tuple > |
Trait informing if there are elements in Tuple with tag Tag. More... | |
| template<typename Tag , typename Tuple > | |
| using | util::count_tags = count_extracted_types< TagExtractor, Tag, Tuple > |
Trait counting the elements in Tuple with tag Tag. More... | |
| template<typename Tuple > | |
| using | util::has_duplicate_tags = has_duplicate_extracted_types< TagExtractor, Tuple > |
Trait reporting if multiple elements in Tuple have the same tag. More... | |
Functions | |
| template<typename Tag , typename T > | |
| auto | util::makeTagged (T &obj) -> decltype(auto) |
"Converts" obj to an object with tag Tag. More... | |
| template<typename Tag , typename T > | |
| auto | util::makeTagged (T const &obj) -> decltype(auto) |
"Converts" obj to an object with tag Tag. More... | |
| template<typename Tag , typename T > | |
| auto | util::makeTagged (T const &&obj) -> decltype(auto) |
"Converts" obj to an object with tag Tag. More... | |
| template<typename Tag , typename T > | |
| auto | util::makeTagged (T &&obj) -> decltype(auto) |
"Converts" obj to an object with tag Tag. More... | |
| template<typename Tagged > | |
| auto | util::removeTag (Tagged &tagged) -> decltype(auto) |
| "Converts" a tagged type back to its original type. More... | |
| template<typename Tagged > | |
| auto | util::removeTag (Tagged const &tagged) -> decltype(auto) |
| "Converts" a tagged type back to its original type. More... | |
| template<typename Tagged > | |
| auto | util::removeTag (Tagged const &&tagged) -> decltype(auto) |
| "Converts" a tagged type back to its original type. More... | |
| template<typename Tagged > | |
| auto | util::removeTag (Tagged &&tagged) -> decltype(auto) |
| "Converts" a tagged type back to its original type. More... | |
| template<typename Tag , typename Tuple > | |
| auto | util::getByTag (Tuple const &data) -> decltype(auto) |
| Returns the object with the specified tag. More... | |
Variables | |
| template<typename Tag , typename Tuple > | |
| constexpr std::size_t | util::index_of_tag_v = index_of_tag<Tag, Tuple>() |
Direct access to the value in index_of_tag. More... | |
| template<typename Tag , typename Tuple > | |
| constexpr bool | util::has_tag_v = has_tag<Tag, Tuple>() |
Direct access to the value in has_tag. More... | |
| template<typename Tag , typename Tuple > | |
| constexpr unsigned int | util::count_tags_v = count_tags<Tag, Tuple>() |
Direct access to the value in count_tags. More... | |
| template<typename Tuple > | |
| constexpr bool | util::has_duplicate_tags_v = has_duplicate_tags<Tuple>() |
Direct access to the value in has_duplicate_tags. More... | |
Traits for types with a tag.
Tag-related traits operate on "tagged" types. A tagged type is a type which contains a tag type definition, and that type is the tag type.
In the examples, the types used are defined as:
Note that DuplTuple_t has two elements with the same tag (TagA).
| using util::add_tag_t = typedef typename add_tag<T, Tag>::type |
Direct access to the type contained in add_tag.
TaggedType Definition at line 617 of file TupleLookupByTag.h.
| using util::count_tags = typedef count_extracted_types<TagExtractor, Tag, Tuple> |
Trait counting the elements in Tuple with tag Tag.
| Tag | the sought tag |
| Tuple | the tuple-like type holding the elements to check |
index_of_tag, count_tags_v, has_duplicate_tags, has_tagGiven a tuple-like type Tuple, this traits returns the number of element types tagged with Tag.
For example (see above for the definitions):
nTagA, nTagB and nTagC, will be 1 and nTagD will be 0. Likewise, nTagAdupl will be 1, nTagBdupl will be 2, while nTagCdupl and nTagDdupl will be 0.
Definition at line 885 of file TupleLookupByTag.h.
| using util::extract_tags = typedef extract_to_tuple_type<SrcTuple, TagExtractor> |
Returns a tuple with all the tags from SrcTuple.
Definition at line 744 of file TupleLookupByTag.h.
| using util::extract_tags_t = typedef typename extract_tags<SrcTuple>::type |
Direct access to the type in extract_tags.
Definition at line 748 of file TupleLookupByTag.h.
| using util::has_duplicate_tags = typedef has_duplicate_extracted_types<TagExtractor, Tuple> |
Trait reporting if multiple elements in Tuple have the same tag.
| Tuple | the tuple-like type holding the elements to check |
index_of_tag, count_tags, has_duplicate_tags_v, has_tagGiven a tuple-like type Tuple, this traits returns whether any of the tags in the elements appears more than once.
For example (see above for the definitions):
hasDuplTags, will be false and hasDuplTagsDupl will be true.
Definition at line 908 of file TupleLookupByTag.h.
| using util::has_tag = typedef has_extracted_type<TagExtractor, Tag, Tuple> |
Trait informing if there are elements in Tuple with tag Tag.
| Tag | the sought tag |
| Tuple | the tuple-like type holding the elements to check |
index_of_tag, count_tags, has_duplicate_tags, has_tag_vGiven a tuple-like type Tuple, this traits returns whether there is at least one element type tagged with Tag.
For example (see above for the definitions):
hasTagA, hasTagB and hasTagC, will be true and hasTagD will be false. Likewise, hasTagAdupl and hasTagBdupl will be true, while hasTagCdupl and hasTagDdupl will be false.
Definition at line 853 of file TupleLookupByTag.h.
| using util::index_of_tag = typedef index_of_extracted_type<TagExtractor, Tag, Tuple> |
Trait holding the index of the element of Tuple with tag Tag.
| Tag | the sought tag |
| Tuple | the tuple-like type holding the elements to check |
index_of_tag_v, count_tags, has_duplicate_tags, has_tagGiven a tuple-like type Tuple, this traits returns the index of the one element type tagged with Tag. If the target type is not present, or if it is present more than once, a compilation error will ensue.
For example (see above for the definitions):
TagAindex will hold value 0, pointing to the container in Tuple_t of type IntTaggedA, while TagBindex will be 1 and TagBduplIndex will be also 1. Instead, the expression util::index_of_tag<TagD, Tuple_t>() would not compile because no element in Tuple_t is tagged with TagD, and the expression util::index_of_tag<TagA, DuplTuple_t>() would not compile because two elements of DuplTuple_t are tagged TagA.
Definition at line 782 of file TupleLookupByTag.h.
| using util::remove_tag_t = typedef typename remove_tag<Tagged>::type |
Direct access to the type contained in remove_tag.
Definition at line 630 of file TupleLookupByTag.h.
| using util::tag_of = typedef TagExtractor<Tagged> |
Trait holding the tag of Tagged as type.
Definition at line 735 of file TupleLookupByTag.h.
| using util::tag_of_t = typedef typename tag_of<Tagged>::type |
Direct access to the type in tag_of.
Definition at line 739 of file TupleLookupByTag.h.
| using util::type_with_tag = typedef type_with_extracted_type<TagExtractor, Tag, Tuple> |
Trait holding the type of the element of Tuple with tag Tag.
| Tag | the sought tag |
| Tuple | the tuple-like type holding the elements to check |
type_with_tag_t, index_of_tag, count_tags, has_duplicate_tags, has_tagGiven a tuple-like type Tuple, this traits returns the one element type tagged with Tag. If the target type is not present, or if it is present more than once, a compilation error will ensue.
For example (see above for the definitions):
TagA_t will be IntTaggedA, the type in Tuple_t with TagA, while TagB_t will be DoubleTaggedB and TagBdupl_t will be also DoubleTaggedB. Instead, the type util::type_with_tag<TagD, Tuple_t> would not compile because no element in Tuple_t is tagged with TagD, and the type util::type_with_tag<TagA, DuplTuple_t>() would not compile because two elements of DuplTuple_t are tagged TagA.
Definition at line 820 of file TupleLookupByTag.h.
| using util::type_with_tag_t = typedef typename type_with_tag<Tag, Tuple>::type |
Direct access to the value in type_with_tag.
Definition at line 825 of file TupleLookupByTag.h.
| auto util::getByTag | ( | Tuple const & | data | ) | -> decltype(auto) |
Returns the object with the specified tag.
| Tag | the sought tag |
| Tuple | the tuple-like type holding the data |
index_of_tag, count_tags, has_duplicate_tags, has_tagThis function operates in a fashion similar to std::get(), where instead of specifying the index or type of the object to retrieve, the tag is specified.
For example (see above for the definitions):
TagBdata will be a reference to a std::vector<double> in data, currently with values { 0.5, 1.5 }". The attempt to useutil::getByTag()on an argument with duplicate tags (likeDuplTuple_t`) will ensue a compilation error.
Definition at line 940 of file TupleLookupByTag.h.
| auto util::makeTagged | ( | T & | obj | ) | -> decltype(auto) |
"Converts" obj to an object with tag Tag.
| Tag | tag to be added to the object |
| T | type of the object to be tagged (implicitly deduced) |
| obj | (l-value) reference to the object to be tagged |
obj, reinterpreted as tagged TaggedType, add_tagThe returned object is the same as obj, reinterpreted as a different type derived from T and tagged with Tag.
Definition at line 645 of file TupleLookupByTag.h.
| auto util::makeTagged | ( | T const & | obj | ) | -> decltype(auto) |
"Converts" obj to an object with tag Tag.
| Tag | tag to be added to the object |
| T | type of the object to be tagged (implicitly deduced) |
| obj | (l-value) constant reference to the object to be tagged |
obj, reinterpreted as tagged TaggedType, add_tagThe returned object is the same as obj, reinterpreted as a different type derived from T and tagged with Tag.
Definition at line 660 of file TupleLookupByTag.h.
| auto util::makeTagged | ( | T const && | obj | ) | -> decltype(auto) |
"Converts" obj to an object with tag Tag.
| Tag | tag to be added to the object |
| T | type of the object to be tagged (implicitly deduced) |
| obj | (r-value) reference to the object to be tagged |
obj, reinterpreted as tagged TaggedType, add_tagThe returned object is an object of a new type, derived from T , with data copied from obj, and tagged with Tag. The argument object may be a temporary.
Definition at line 676 of file TupleLookupByTag.h.
| auto util::makeTagged | ( | T && | obj | ) | -> decltype(auto) |
"Converts" obj to an object with tag Tag.
| Tag | tag to be added to the object |
| T | type of the object to be tagged (implicitly deduced) |
| obj | the object to be tagged |
obj, reinterpreted as tagged TaggedType, add_tagThe returned object is the same as obj, reinterpreted as a different type derived from T and tagged with Tag. The returned object is a temporary of the new type, whose content is moved (std::move()) from the argument object obj.
Definition at line 693 of file TupleLookupByTag.h.
| auto util::removeTag | ( | Tagged & | tagged | ) | -> decltype(auto) |
"Converts" a tagged type back to its original type.
Definition at line 698 of file TupleLookupByTag.h.
| auto util::removeTag | ( | Tagged const & | tagged | ) | -> decltype(auto) |
"Converts" a tagged type back to its original type.
Definition at line 703 of file TupleLookupByTag.h.
| auto util::removeTag | ( | Tagged const && | tagged | ) | -> decltype(auto) |
"Converts" a tagged type back to its original type.
Definition at line 708 of file TupleLookupByTag.h.
| auto util::removeTag | ( | Tagged && | tagged | ) | -> decltype(auto) |
"Converts" a tagged type back to its original type.
Definition at line 713 of file TupleLookupByTag.h.
| constexpr unsigned int util::count_tags_v = count_tags<Tag, Tuple>() |
Direct access to the value in count_tags.
Definition at line 889 of file TupleLookupByTag.h.
| constexpr bool util::has_duplicate_tags_v = has_duplicate_tags<Tuple>() |
Direct access to the value in has_duplicate_tags.
Definition at line 912 of file TupleLookupByTag.h.
Direct access to the value in has_tag.
Definition at line 857 of file TupleLookupByTag.h.
| constexpr std::size_t util::index_of_tag_v = index_of_tag<Tag, Tuple>() |
Direct access to the value in index_of_tag.
Definition at line 787 of file TupleLookupByTag.h.
1.8.11