Login | Register   
RSS Feed
Download our iPhone app
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
	char m_str[LENGTH];

	{	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
	FixedString<32> str;

MyStruct mine;
mine.str = "This is mine";
Paul Sader
Comment and Contribute






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



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