devxlogo

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<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";
See also  Does It Make Sense to Splurge on a Laptop?
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist