codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#pragma once // Copyright (c) 2011, Alf P. Steinbach //--------------------------------------------------------- Dependencies: #include <assert.h> #include <string> #include <sstream> //#include "platform_adaption.h" //--------------------------------------------------------- Interface: namespace progrock{ namespace cppx{ namespace narrow { using std::string; using std::ostringstream; template< class Type > inline string stringFrom( Type const& v ); } // namespace narrow namespace wide { using std::wstring; using std::wostringstream; template< class Type > inline wstring stringFrom( Type const& v ); } // namespace wide namespace detail { using std::basic_string; template< class Char > class S { private: typedef basic_string<Char> String; String s_; template< class Type > static String stringFrom( Type const& v ); static Char const* stringFrom( Char const* s ) { assert( s != 0 ); return s; } public: template< class Type > S& operator<<( Type const& v ) { s_ += stringFrom( v ); return *this; } String const& str() const { return s_; } operator String const& () const { return str(); } Char const* cStr() const { return s_.c_str(); } operator Char const* () const { return cStr(); } }; template<> template< class Type > std::string detail::S<char>::stringFrom( Type const& v ) { return narrow::stringFrom( v ); } template<> template< class Type > std::wstring detail::S<wchar_t>::stringFrom( Type const& v ) { return wide::stringFrom( v ); } } // namespace detail namespace narrow { template< class Type > inline string stringFrom( Type const& v ) { ostringstream stream; stream << v; return stream.str(); } template<> inline string stringFrom( string const& s ) { return s; } typedef detail::S<char> S; } // namespace narrow namespace wide { template< class Type > inline wstring stringFrom( Type const& v ) { wostringstream stream; stream << v; return stream.str(); } template<> inline wstring stringFrom( wstring const& s ) { return s; } typedef detail::S<wchar_t> S; } // namespace wide } } // namespace progrock::cppx
Private
[
?
]
Run code
Submit