dcsimg
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: All
Apr 16, 1998

WEBINAR:

On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning


Uses of an anonymous union

Unions are used to minimize memory waste. For example, consider the following database-transaction class used to update a person's data. The key can be either a unique ID number or a person's last name, but never both at once:
 
class UpdateDetails {
	private:
	enum keytype{ keystring, keyID} key;
	char *name;
	long ID;
	//...
	UpdateDetails(const char *n): key(keystring),
						n (new char [strlen)n) +1]
	 					{strcpy(name,n);} 

	UpdatePersonalDetails(long id) : ID(id), key(keyID) {}
};
Clearly, memory is wasted here since only one of the keys can be used in each transaction. An anonymous union (for instance, an embedded union having neither a tag-name nor an instance name) can be used in this case to avoid memory waste:
 
class UpdateDetails {
	enum keytype{ keystring, keyID} key;
	union {  //anonymous union: 1. has no tag name,
		char *name;
		long ID 
};    // 2. and no instance name.
public:
UpdateDetails(const char *n) : key (keystring), 
						 n (new char [strlen(n) +1] 
						{strcpy(name, n);} 

	UpdateDetails(long id) : ID(id), key(keyID) {};
	//...
};
The advantage over an ordinary union is that in this case, the members of an anonymous union are accessed directly:
 
void  UpdateDetails::GetID() const 
{ 
  if (key == keyID) 
   return ID;//anonymous union member, accessed like ordinary member

  return 0L;  //indicate string key is used 
}
Danny Kalev
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date