Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » C++
Language: C++
Expertise: Intermediate
Oct 11, 2002

Fixed-length Strings Using Templates


Instead of writing a string class that contains a (char *), why not write a string class with a fixed char array? Of course, it would be repetitive if you had to declare many classes for each string length (Str16, Str32, etc...), but you can use templates instead:
 
template <unsigned LENGTH>
class FixedStr
{
public:
	char m_str[LENGTH];

	FixedStr()
	{	memset(this,0, LENGTH);}
	operator char *()
	{	return m_str;	}
	FixedStr & operator =(const char* rhs)
	{
		strncpy(m_str, rhs, LENGTH-1);
		return *this;
	}
};

With this simple declaration, you can already use the FixedStr class , as in the following code:
 
void func()
{
	FixedStr<32> str = {"Hello, world!"};
	// If initializer string is too
	// long, an error is given when compiling

	cout << str << endl;
}

Such a string class can be useful if you are trying to access a string in a block of memory, as in this code:
 
void func2(char * pChar /*of length 32*//*)
{
	FixedStr<32> & str = (FixedStr<32>&)*pChar;
	str = "I like memory hacking";
}

The best use of this string class is probably in structs composed of collections of data where you don't want to bother with arrays of characters:
 
struct MyStruct
{
	(data);
	...
	FixedString<32> str;
}

MyStruct mine;
mine.str = "This is mine";
Paul Sader
 
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