me wrote:
> I want to insert a load of pieces of data into a map
>
> The map has an std::string representing a field name as the key, and the
> value is a struct with 2 members - the field length and a bool
> indicating whether the field is a special field or not.
>
> The struct representing the value has a constructor that takes a single
> parameter for the length, and defaults the boolean to false.
>
> To simplify the code, and make things look neater, I defined a macro:
>
> #define SETUP_FIELD(FIELD_NAME, FIELD_SIZE)
> FieldMap.insert(std::make_pair(std::string("FIELD_ NAME"),FieldData(FIELD_SIZE)))
FieldMap.insert(std::make_pair(std::string(#FIELD_ NAME), \
FieldData(FIELD_SIZE)));
RTFM on the '#' stringizing operator.
> ;
>
> So i can do:
>
> SETUP_FIELD (TheFirstField,3) ;
> SETUP_FIELD (TheSecondField,1) ;
> SETUP_FIELD (TheThirdField,2) ;
> SETUP_FIELD (TheFourthField,7) ;
>
> etc...
>
> But when i look at the map, all the keys are set to "FIELD_NAME", rather
> than "TheFirstField" etc - the macro has not substituted the string I
> pass in. I guess this is something to do with substitution within a
> string literal...
Yes, there is no such substitution.
>but I'm a bit stumped.
>
> Any Ideas?
See above.
V
|