I searched for an implementation of std::map runtime ordering and have found this solution: STL std::map dynamic ordering
It is clear for me, but I don't understand, how it can be possible to use OrderingType in the constructor of std::map. std::map has a constructor, which gets a comparator object as an argument. So it is normal from my point of view to use code like this:
int main()
{
Ordering<int> test_ordering( ASCENDING );
CUSTOMMAP map1( test_ordering );
return 0;
}
But code from above mentioned topic also compiles:
int main()
{
CUSTOMMAP map1( ASCENDING );
//...
return 0;
}
I don't understand, why it works: constructor of std::map must not get argument of OrderingType enumeration instead of Ordering class object itself.
If the constructor on Ordering<int> that takes your enumeration isn't declared as explicit, then it is considered a "conversion constructor" that can automatically be inserted when the compiler has a need to convert from your enumeration type to the Ordering<int> type. So the compiler is effectively taking this:
CUSTOMMAP map1( ASCENDING );
and transforming it into this:
CUSTOMMAP map1( Ordering<int>(ASCENDING) );
This is called an implicit conversion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With