From: http://blog.csdn.net/tingsking18/article/details/6699274
- //============================================================================
- // Name : main.cpp
- // Author : Jing
- // Version :
- // Copyright : Jing
- // Description : Hello World in C++, Ansi-style
- //============================================================================
- #include <string>
- #include <stdio.h>
- #include <iostream>
- #include <stdarg.h>
- using namespace std;
- template<typename _CharT, typename _Traits, typename _Alloc>
- class SString: public basic_string<_CharT, _Traits, _Alloc>
- {
- public:
- typedef typename _Alloc::template rebind<_CharT>::other _CharT_alloc_type;
- typedef typename _CharT_alloc_type::size_type size_type;
- static const size_type npos = static_cast<size_type> (-1);
- inline SString() :
- basic_string<_CharT, _Traits, _Alloc> ()
- {
- }
- explicit SString(const _Alloc& __a) :
- basic_string<_CharT, _Traits, _Alloc> ()
- {
- }
- SString(const SString& __str) :
- basic_string<_CharT, _Traits, _Alloc> (__str)
- {
- }
- SString(const SString& __str, size_type __pos, size_type __n = npos) :
- basic_string<_CharT, _Traits, _Alloc> (__str, __pos, npos)
- {
- }
- SString(const SString& __str, size_type __pos, size_type __n,
- const _Alloc& __a) :
- basic_string<_CharT, _Traits, _Alloc> (__str, __pos, __n, __a)
- {
- }
- SString(const _CharT* __s, size_type __n, const _Alloc& __a = _Alloc()) :
- basic_string<_CharT, _Traits, _Alloc> (__s, __n, __a)
- {
- }
- SString(const _CharT* __s, const _Alloc& __a = _Alloc()) :
- basic_string<_CharT, _Traits, _Alloc> (__s, __a)
- {
- }
- SString(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) :
- basic_string<_CharT, _Traits, _Alloc> (__n, __c, __a)
- {
- }
- template<class _InputIterator>
- SString(_InputIterator __beg, _InputIterator __end, const _Alloc& __a =
- _Alloc()) :
- basic_string<_CharT, _Traits, _Alloc> (__beg, __end, __a)
- {
- }
- SString& operator=(const SString& __str)
- {
- return this->assign(__str);
- }
- SString& operator=(const _CharT* __s)
- {
- return this->assign(__s);
- }
- SString& operator=(_CharT __c)
- {
- this->assign(1, __c);
- return *this;
- }
- inline SString &Format(const char *_format, ...)
- {
- char szBuffer[1000];
- memset(szBuffer, 0x00, sizeof(szBuffer));
- va_list ap;
- va_start(ap, _format);
- try
- {
- vsnprintf(szBuffer, 1000, _format, ap);
- } catch (...)
- {
- cout << "ERROR: format the string failed..." << endl;
- return *this;
- }
- va_end(ap);
- this->append(szBuffer);
- return *this;
- }
- };
- typedef SString<char, char_traits<char> , allocator<char> > CString;
- int main(int argc, char* argv[])
- {
- CString s("a");
- CString s1 = s.Format("abc%d", 1);
- CString s4 = s;
- CString s2(s1);
- CString s3(s1.begin(), s1.end());
- cout << s3.c_str() << endl;
- int i;
- cin >> i;
- return 0;
- }