模板函数:
template <typename T>
func()
模板类:
template <class T>
class ClassName{
public:
void add(T a){
}
}
template <class T>
void ClassName<T>::add(T a){
}
#include
#include
#include
#include
#include
using namespace std; /** * Template Function */ /* template
inline T const& Max(T const& a, T const& b){ return a < b ? b : a; } int main(){ int i = 39; int j = 20; cout << "Max(i, j):" << Max(i, j) << endl; double f1 = 13.5; double f2 = 20.7; cout << "Max(f1, f2):" << Max(f1, f2) << endl; string s1 = "Hello"; string s2 = "World"; cout << "Max(s1, s2):" << Max(s1, s2) << endl; return 0; } */ /*Template Class*/ template
class Stack{ private: vector
elems; public: void push(T const&); void pop(); T top() const;//constant function do not change the variable member's value bool empty() const{ return elems.empty(); } int depth(){ return elems.size(); } }; template
void Stack
::push(T const& elem){ elems.push_back(elem); } template
void Stack
::pop(){ if (elems.empty()){ throw out_of_range("Stack<>::pop():empty"); } elems.pop_back(); } template
T Stack
::top() const{ if (elems.empty()){ throw out_of_range("Stack<>::pop():empty"); } return elems.back(); } int main(){ try{ Stack
intStack; Stack
stringStack; intStack.push(7); cout << intStack.top() << endl; cout << "intStack size " << intStack.depth() << endl; stringStack.push("hello"); stringStack.push("hi"); cout << stringStack.top() << std::endl; cout << "stringStack size " << stringStack.depth() << endl; stringStack.pop(); cout << "Pop stringStack size " << stringStack.depth() << endl; stringStack.pop(); cout << "Pop stringStack size " << stringStack.depth() << endl; stringStack.pop(); } catch (exception const& ex){ cerr << "Exception:" << ex.what() << endl; return -1; } }