[#BloombergLP-bdlb-TransformIterator_Traits-05]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlb.adoc[bdlb]::xref:BloombergLP/bdlb/TransformIterator_Traits-0f.adoc[TransformIterator&lowbar;Traits]&lt;RESULT(*)(ARGUMENT), ITERATOR&gt;
:relfileprefix: ../../
:mrdocs:

Specialize the transform iterator traits template for functors that are function or function pointer types&period; It is sufficient to inherit from the version of the traits class that corresponds to a `bsl&colon;&colon;function` of the function type parameter&period;

== Synopsis

Declared in `&lt;bdlb&lowbar;transformiterator&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class RESULT,
    class ARGUMENT,
    class ITERATOR&gt;
struct xref:BloombergLP/bdlb/TransformIterator_Traits-0f.adoc[TransformIterator&lowbar;Traits]&lt;RESULT(*)(ARGUMENT), ITERATOR&gt;
    : xref:BloombergLP/bdlb/TransformIterator_Traits-0f.adoc[TransformIterator&lowbar;Traits&lt;bsl::function&lt;RESULT(ARGUMENT)&gt;, ITERATOR&gt;]
----

== Base Classes

[cols="1,4"]
|===
| Name| Description
| `xref:BloombergLP/bdlb/TransformIterator_Traits-0f.adoc[TransformIterator&lowbar;Traits&lt;bsl::function&lt;RESULT(ARGUMENT)&gt;, ITERATOR&gt;]`
| This component&hyphen;private class defines various types that are used in the implementation of the transform iterator&period;
|===

== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/BaseIteratorTraits.adoc[`BaseIteratorTraits`] 
| Define the iterator traits class of the underlying iterator&period;
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/ResultType.adoc[`ResultType`] 
| Define the result type returned by the functor&period; This is not necessarily the same type as the dereference of the iterator&period; In C&plus;&plus;11, the result type can be determined automatically&period; Note that various iterations of the language standard might want to instead use `std&colon;&colon;result&lowbar;of` or `std&colon;&colon;invoke&lowbar;result` (which have been variously added and then deprecated), but the following works from C&plus;&plus;11 onwards&period;
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/difference_type.adoc[`difference&lowbar;type`] 
| Type used to represent distances between iterators&period;
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/iterator_category.adoc[`iterator&lowbar;category`] 
| Define the iterator category of the transform iterator&period; If the functor returns a reference type, we pass through the iterator category of the underlying iterator, otherwise we use the input iterator tag (because all the other tags require that dereferencing produces a reference)&period;
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/pointer.adoc[`pointer`] 
| 
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/reference.adoc[`reference`] 
| Define the remaining standard types of the transform iterator&period;
| xref:BloombergLP/bdlb/TransformIterator_Traits-0f/value_type.adoc[`value&lowbar;type`] 
| Value type produced by applying the functor to a dereferenced underlying iterator&period;
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
