operator < を既に存在する,int, char *, と関連付けたい場合に,
どうするのが良いのでしょうか?とりあえず,私の知識では下記の
ような方法しか思いつきません。
# streamも例外の使わないので,Templateを使っていて
  も非常にコンパクトな実行ファイルが生成されます。
# ところで,VC 以外のSTLは,operator new に失敗すると,
  cout << "out of memory" << endl;
  exit(1);
  となってしまいますが,これは仕方が無いのでしょうか?

#include <stdio.h>
#include <string.h>

template<class T>
class dumch {
public:
    char *m_ptr;
    dumch( T ptr )      { m_ptr = ptr; }
    operator = (T ptr)  { m_ptr = ptr; }
    void *operaror()    { return m_ptr; }
    operator T()        { return m_ptr; }
    operator < (T ptr)
        { printf("(<)"); return stricmp( m_ptr, ptr ) < 0; }
    operator > (T ptr)
        { printf("(<)"); return stricmp( m_ptr, ptr ) > 0; }
    operator == (T ptr)
        { printf("(=)"); return stricmp( m_ptr, ptr ) == 0; }
};

int main()
{
    char *ptr = "abc";
    char *ptr2 = "def";
#if 1
#define ptr (dumch<char*>)ptr
    if( ptr < ptr2 )
        { printf(" %s < %s\n", ptr, ptr2); }
    if( ptr > ptr2 )
        { printf(" %s > %s\n", ptr, ptr2); }
    if( ptr == ptr2 )
        { printf(" %s == %s\n", ptr, ptr2); }
#else
    #define dum  dumch<char *>
    if( dum(ptr) < dum(ptr2) )
        { printf(" %s < %s\n", ptr, ptr2); }
    if( dum(ptr) > dum(ptr2) )
        { printf(" %s > %s\n", ptr, ptr2); }
    if( dum(ptr) == dum(ptr2) )
        { printf(" %s == %s\n", ptr, ptr2); }
#endif
    return 0;
}

- -- C4B2 52B9 70B4 291B C966  B71F 9B8A 86E1 29B7 6B09
as you like.. e-mail;mailto:v...@ha.bekkoame.ne.jp