"Anthony Williams" <[EMAIL PROTECTED]> wrote in message news:15827.36666.343000.937688@;gargle.gargle.HOWL... > Edward Diener writes: > > "Anthony Williams" <[EMAIL PROTECTED]> wrote in > > message news:15826.2782.569000.619636@;gargle.gargle.HOWL... > > > Edward Diener writes: > > > > Finally I would like a non-partisan answer from you to my next question > > and > > > > I am perfectly willing to be wrong and accept the fact that my lack of > > > > understanding of "concept" based explanations are at fault. Do you feel > > that > > > > the answers to my 2 questions are readily apparent to most intelligent > > C++ > > > > programmers from reading the property map docs ? > > > > > > As Jan Langer pointed out, there are specific pages for each of the > > property > > > map categories. If you missed these you will have difficulty piecing > > > everything together. > > > > No, I saw them from the beginning. I just didn't ( and still don't ) > > understand how they fit in with some sort of global get(), put(), and > > operator[] template functions. > > operator[] has to be a member function if it exists at all, unless the > built-in operator[] is sufficient. > > get() and put() may or may not be global, and may or may not be > templates. They must be implemented for each property map so that the > expressions get(property_map,key_value) and > put(property_map,key_value,new_value) compile and work OK. This means that > they may be global, or they may be in an associated namespace of the property > map or key value types, and found by ADL. > > The parameter types may or may not exactly match the types of the property map > etc., provided that the functions can be found, and the supplied arguments can > be converted to the required parameter types --- e.g. if the property map is > actually a pointer to X, then the real parameter for get() could be a pointer > to Y, if Y is an unambiguous public base of X --- and provided that overload > resolution finds the correct function. I would expect in the common case, that > the get() and put() functions are supplied in the same namespace as a property > map type, and the parameter types exactly match the types of the property map > and key value, give or take a const&, but this is not necessarily the case. > > The presence of a template get() will probably be an impediment if the > parameters are not an exact match for the supplied types, since deduced > template parameters have a nasty tendency to exactly match the supplied > arguments, and may therefore be picked in preference, or cause an ambiguity.
Then the get(), put(), and operator[] values are purely user defined and there are no common implementations for these which automatically work with any property map. Everything having to do with property maps are just a generalized concept of how this should work so that a given property map has effective get(), put() and operator[] functions which an end user can use to associate a value with a property ( key ). Whatever implementations exist in the header files are just specific types of property maps which have already been developed based on the different categories. Is this a correct understanding of the property map concept ? If so, it is something I completely missed from the docs, but which others were able to understand immediately. _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost