//: C05:BearCorner.cpp // From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison. // (c) 1995-2004 MindView, Inc. All Rights Reserved. // See source code use permissions stated in the file 'License.txt', // distributed with the code package available at www.MindView.net. // Illustrates traits classes. #include #include "BearCorner.h" using namespace std; // A custom traits class class MixedUpTraits { public: typedef Milk beverage_type; typedef Honey snack_type; }; // The Guest template (uses a traits class) template > class BearCorner { Guest theGuest; typedef typename traits::beverage_type beverage_type; typedef typename traits::snack_type snack_type; beverage_type bev; snack_type snack; public: BearCorner(const Guest& g) : theGuest(g) {} void entertain() { cout << "Entertaining " << theGuest << " serving " << bev << " and " << snack << endl; } }; int main() { Boy cr; BearCorner pc1(cr); pc1.entertain(); Bear pb; BearCorner pc2(pb); pc2.entertain(); BearCorner pc3(pb); pc3.entertain(); } ///:~