//: C05:BearCorner.h
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
#ifndef BEARCORNER_H
#define BEARCORNER_H
#include <iostream>
using std::ostream;

// Třídy položek (Charakteristiky hostů):
class Mleko {
public:
  friend ostream& operator<<(ostream& os, const Mleko&) {
    return os << "Mléko";
  }
};

class KondenzovaneMleko {
public:
  friend ostream&
  operator<<(ostream& os, const KondenzovaneMleko &) {
    return os << "Kondenzované mléko";
  }
};

class Med {
public:
  friend ostream& operator<<(ostream& os, const Med&) {
    return os << "Med";
  }
};

class Kolacky {
public:
  friend ostream& operator<<(ostream& os, const Kolacky&) {
    return os << "Koláčky";
  }
};

// Třídy hostů:
class Medvidek {
public:
  friend ostream& operator<<(ostream& os, const Medvidek&) {
    return os << "Teodor";
  }
};

class Chlapec {
public:
  friend ostream& operator<<(ostream& os, const Chlapec&) {
    return os << "Patrick";
  }
};

// Základní šablona charakteristik (prázdná - může uchovávat běžné typy)
template<class Host> class CharakteristikyHosta;

// Spacializace charakteristik pro typy hostů
template<> class CharakteristikyHosta<Medvidek> {
public:
  typedef KondenzovaneMleko napoj_t;
  typedef Med svacina_t;
};

template<> class CharakteristikyHosta<Chlapec> {
public:
  typedef Mleko napoj_t;
  typedef Kolacky svacina_t;
};
#endif // BEARCORNER_H ///:~
