template<class T> class numeric_limits { public: static const bool is_specialized = false; static T min() throw(); static T max() throw(); static const int digits = 0; static const int digits10 = 0; static const bool is_signed = false; static const bool is_integer = false; static const bool is_exact = false; static const int radix = 0; static T epsilon() throw(); static T round_error() throw(); static const int min_exponent = 0; static const int min_exponent10 = 0; static const int max_exponent = 0; static const int max_exponent10 = 0; static const bool has_infinity = false; static const bool has_quiet_NaN = false; static const bool has_signaling_NaN = false; static const float_denorm_style has_denorm = denorm_absent; static const bool has_denorm_loss = false; static T infinity() throw(); static T quiet_NaN() throw(); static T signaling_NaN() throw(); static T denorm_min() throw(); static const bool is_iec559 = false; static const bool is_bounded = false; static const bool is_modulo = false; static const bool traps = false; static const bool tinyness_before = false; static const float_round_style round_style = round_toward_zero; };
template<class charT, class traits = char_traits<charT>, class allocator = allocator<charT> > class basic_string;
template<> struct char_traits<char> { typedef char char_type; typedef int int_type; typedef streamoff off_type; typedef streampos pos_type; typedef mbstate_t state_type; static void assign(char_type& c1, const char_type& c2); static bool eq(const char_type& c1, const char_type& c2); static bool lt(const char_type& c1, const char_type& c2); static int compare(const char_type* s1, const char_type* s2, size_t n); static size_t length(const char_type* s); static const char_type* find(const char_type* s, size_t n, const char_type& a); static char_type* move(char_type* s1, const char_type* s2, size_t n); static char_type* copy(char_type* s1, const char_type* s2, size_t n); static char_type* assign(char_type* s, size_t n, char_type a); static int_type not_eof(const int_type& c); static char_type to_char_type(const int_type& c); static int_type to_int_type(const char_type& c); static bool eq_int_type(const int_type& c1, const int_type& c2); static int_type eof(); };
std::string s;
std::basic_string<char, std::char_traits<char>, std::allocator<char> > s;
//: C05:BearCorner.h #ifndef BEARCORNER_H #define BEARCORNER_H #include <iostream> using std::ostream; // Item classes (traits of guests): class Milk { public: friend ostream& operator<<(ostream& os, const Milk&) { return os << "Milk"; } }; class CondensedMilk { public: friend ostream& operator<<(ostream& os, const CondensedMilk &) { return os << "Condensed Milk"; } }; class Honey { public: friend ostream& operator<<(ostream& os, const Honey&) { return os << "Honey"; } }; class Cookies { public: friend ostream& operator<<(ostream& os, const Cookies&) { return os << "Cookies"; } }; // Guest classes: class Bear { public: friend ostream& operator<<(ostream& os, const Bear&) { return os << "Theodore"; } }; class Boy { public: friend ostream& operator<<(ostream& os, const Boy&) { return os << "Patrick"; } }; // Primary traits template (empty-could hold common types) template<class Guest> class GuestTraits; // Traits specializations for Guest types template<> class GuestTraits<Bear> { public: typedef CondensedMilk beverage_type; typedef Honey snack_type; }; template<> class GuestTraits<Boy> { public: typedef Milk beverage_type; typedef Cookies snack_type; }; #endif // BEARCORNER_H ///:~
Listado 6.41. C05/BearCorner.h