缺省模板参数
template <typename T,typename CONT>=std::vector<T> >
class Stack
{
...
}
#ifndef _STACK_H_
#define _STACK_H_
#include <exception>
#include <deque>
using namespace std;
template <typename T,typename CONT = deque<T> >
class Stack
{
public:
Stack() :c_()
{
}
~Stack()
{
}
void Push(const T& elem)
{
c_.push_back(elem);
}
void Pop()
{
c_.pop_back();
}
T& Top()
{
return c_.back();
}
const T& Top() const
{
return c_.back();
}
bool Empty() const
{
return c_.empty();
}
private:
CONT c_;
int top_;
};
#endif
#include"Stack.h"
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
Stack<int, vector<int> >s;
s.Push(1);
s.Push(2);
s.Push(3);
while (!s.Empty())
{
cout << s.Top() << endl;
s.Pop();
}
return 0;
}
成员模板
#include <iostream>
using namespace std;
template <typename T>
class MyClass
{
private:
T value;
public:
MyClass(){}
template <class X>
MyClass(const MyClass<X>& x) :value(x.GetValue())
{
}
template <class X>
void Assign(const MyClass<X>& x)
{
value = x.GetValue();
}
T GetValue() const { return value; }
};
int main(void)
{
MyClass<double> d;
MyClass<int> i;
d.Assign(d);
d.Assign(i);
MyClass<double> d2(i);
return 0;
}