Re: initialize reference
jean wrote:
I have the following code. Basically, I want to insert to
different map depends on m_bDefaultTag . I know I need to
initialize updateTags. But how? Is there a way to achieve my
goal? Thanks.
class tag_entry
{
string m_name;
int value;
}
void MyFunc()
{
std::map<std::string, tag_entry >& customTags =
GetCustomTags();
std::map<std::string, tag_entry >& defineTags =
GetDefineTags();
std::map<std::string, tag_entry >& updateTags;
if( m_bDefaultTag ) {
updateTags = defineTags;
}
else {
updateTags = customTags;
}
std::map< std::string, tag_entry >& updateTags
= m_bDefaultTag ? GetDefineTags() : GetCustomTags() ;
customTags.insert( mapElement );
}
In more complicated cases, you use pointers. If you really need
a reference, you then initialize the reference by dereferencing
the pointers. Something like:
Map* customTags = GetCustomTags() ;
Map* defineTags = GetDefineTags() ;
Map* pUpdateTags = NULL ;
if ( m_bDefaultTag ) {
pUpdateTags = defineTags ;
} else {
pUpdateTags = customTags ;
}
Map& updateTags = *pUpdateTags ;
(Obviously, in such a simple case, you'd use the conditional
expression to initialize pUpdateTags, and only call
GetCustomTags() or GetDefineTags() as necessary. Which means
you end up with my first suggestion. But on a few occasions,
I've had to deal with much more complicated decision structures,
and using pointer, as here, has been necessary.)
--
James Kanze GABI Software
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]