What made CString of yesterday "inflexible"?
1.Only for MFC-folks!
Yes... CString with MSVC 6.0 was notoriously connected to MFC Projects as if other project types didn't have any need for a TCHAR String Wrapper Class! One reason for it would be the linker error one would get for using this class in a non-MFC Project.
2. Need to use a CString? Convert to TCHAR!
CString is a string wrapper for TCHAR strings. In doing so, it came with a good number of helpful member methods. However, the implementation of this class in MSVC 6.0 was such that if a programmer needed to make use of the utility member methods, he would need to convert his string data type to TCHAR - back and forth.
This "restriction" automatically excluded programmers using ANSI strings (char*) in UNICODE builds from using this class, and ditto for those using UNICODE strings (WCHAR*) in non-UNICODE builds from using this class - as in both these cases, the strings in question aren't TCHAR strings - the type that CString wraps.
What makes CString of today "flexible" and actually more "likeable"?
1. Use it in any project type - even in a console application!
Yes... All the programmer needs to do is to include the following header -
#include <atlstr.h>2. Don't change your String Type to suit CString! Choose the right CString instead!
With Visual Studio 7.x and better, CString is actually a specialization of template Class CStringT
Additionally, there exist two useful specializations of CStringT -
CStringA that specializes CStringT for type char, and CStringW that specilizes CStringT for type wchar_t.
The existence of CStringA and CStringW gives the programmer, the flexibility to use the utility member methods supplied by CStringT even when their strings aren't of type - TCHAR.