Fixed-length Strings Using Templates

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 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 str = {"Hello, world!"};	// If initializer string is too	// long, an error is given when compiling	cout 

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 & str = (FixedStr&)*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 str;}MyStruct mine;mine.str = "This is mine";


Share the Post: