By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,462 Members | 3,388 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,462 IT Pros & Developers. It's quick & easy.

Problem with macro expansion

P: n/a
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
Jul 22 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
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
Jul 22 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.