模板函数:
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;
}
}