Problem with macro expansion

M

me

Hi guys

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)))
;

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...but I'm a bit stumped.

Any Ideas?

dtw
 
V

Victor Bazarov

me said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top