class GenericStack{protected: GenericStack():top(0){} virtual ~GenericStack() { while(top) { Data *temp = top; top = top->next; delete temp; }
top = 0; } void push(void *value) { top = new Data(value,top); }
void* pop() { if (top) return top->val; } bool empty()const { return top == 0; }private:
struct Data { void *val; Data* next;
Data(void *v,Data *ne):val(v),next(ne){} };
Data *top;};
template<class T>class Stack : private GenericStack{public:
void push( T *v) { GenericStack::push(v); }
~Stack() {
}
T* value() { return static_cast<T*>(GenericStack::pop()); }
bool empty()const { return GenericStack::empty(); }
};
int main(){ string a1 = "hello",b = "good"; Stack<string> a; a.push(&a1); a.push(&b); cout<<*(a.value()); system("pause");}