///////////////////////////////////////////////////// // MT1Q5.cpp - Template Specialization // // // // Jim Fawcett, CSE687 - OOD Midterm, Spring 2013 // ///////////////////////////////////////////////////// #include #include #include "../MTutility/MTutility.h" template class X { public: X(const U& u, const V& v) : u_(u), v_(v) {} void say() { std::cout << "\n " << typeid(*this).name(); std::cout << "\n arguments are: " << u_ << ", " << v_; } private: U u_; V v_; }; template class X { public: X(const std::string& u, V v) : u_(u), v_(v) {} void say() { std::cout << "\n " << typeid(*this).name(); std::cout << "\n first argument is specialization to std::string: " << u_ << ", " << v_; } private: std::string u_; V v_; }; template<> class X { public: X(const std::string& u, const double& v) : u_(u), v_(v) {} void say() { std::cout << "\n " << typeid(*this).name(); std::cout << "\n first arg specialized to std::string, second arg specialized to double: " << u_ << ", " << v_; } private: std::string u_; double v_; }; int main() { Title("MT1Q5 - Template Specialization"); X x1(1,2); x1.say(); X x2("string", 3); x2.say(); X x3("another string", 3.1415927); x3.say(); std::cout << "\n\n"; }