RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.

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



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

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