// STL의 string이 가지고 있는 단위전략패턴의 개념
// STL의 string은 문자열의 비교를 위해 단위전략클래스를 사용하고 있다.
// 사용자가 만들어서 전달할수도있다.
struct my_traits : public char_traits<char>
{
        // 두문자가 같은 지를 비교하기 위해 아래함수를 호출한다.
        static bool eq(char c1, char c2)
        {
               return toupper(c1) == toupper(c2);
        }
        static bool lt(char c1, char c2)
        {
               return toupper(c1) < toupper(c2);
        }
        static int  compare( const char* s1, const char* s2, size_t n )
        {
               return memicmp( s1, s2, n );
        }
        // 그 외의 몇개의 함수를 더 제공해야 한다.
        // 하지만 상속 받았으므로 부모 것을 그냥 사용 할 수도 있다.
};
typedef basic_string<char, my_traits, allocator<char> > ci_string;
void main()
{
        // 템플릿 인자를 사용하는 단위전략, 함수 단위전략보다 다양한 작업가능.
        // 또, 컴파일시간에 결정되므로 오버헤드도 줄인다.
        // basic_string<char, my_traits, allocator<char> > s1 = "AA"; 
        // 유니코드, 단위전략, 할당
        ci_string s1 = "hello";
        ci_string s2 = "HELLO";
        //string s1 = "hello";
        //string s2 = "HELLO";
        if( s1 == s2 )
        {
               cout << "same" << endl;
        }
        else
        {
               cout << "NotSame" << endl;
        }
}







