当前在线人数15487
首页 - 分类讨论区 - 电脑网络 - 葵花宝典版 -阅读文章
未名交友
[更多]
[更多]
文章阅读:Re: c++中怎样实现这样的堆栈?
[同主题阅读] [版面: 葵花宝典] [作者:NecroMancer] , 2004年08月04日13:39:46
NecroMancer
进入未名形象秀
我的博客
[上篇] [下篇] [同主题上篇] [同主题下篇]

发信人: NecroMancer (神秘人), 信区: Programming
标  题: Re: c++中怎样实现这样的堆栈?
发信站: Unknown Space - 未名空间 (Wed Aug  4 13:39:46 2004) WWW-POST

# include <stack>

struct GenericType {
  virtual GenericType * copy() = 0 ;
  virtual ~GenericType() {}
};

template<class T>
class RealType : public GenericType {
  T object ;
public:
  explicit RealType( const T& x ) : object(x) {}
  GenericType * copy() { return new RealType(*this) ; }
  T& dump() { return object ; }
  const T& dump() const { return object ; }
};

class TypeEnvelope {
  GenericType * content ;
public:
  TypeEnvelope( GenericType * letter ) : content( letter ) {}
  TypeEnvelope( const TypeEnvelope& x ) : content( x.content->copy() ) {}
  const TypeEnvelope& operator = ( const TypeEnvelope& x ) {
    delete content ;
    content = x.content->copy() ;
    return *this ;
  }
~TypeEnvelope() { delete content ; }
  template<class T> T& dump()
  { return (dynamic_cast<RealType<T>*>(content))->dump(); }
  template<class T> const T& dump() const
  { return (dynamic_cast<const RealType<T>*>(content))->dump(); }
};

class TypelessStack {
  std::stack<TypeEnvelope> data ;
public:
  template<class T> void push( const T& object )
  { data.push( new RealType<T>(object) ); }
  void pop() { data.pop() ; }
  template<class T> T& top() { return data.top().template dump<T>() ; }
  template<class T> const T& top() const { return data.top().template
dump<T>() ; }
  size_t size() const { return data.size() ; }
  bool empty() const { return data.empty() ; }
};

// test code follows

# include <iostream>

int main() {
  TypelessStack s ;
  s.push( 3 );
  s.push( 10.0 );
  std::cout << s.top<double>() << ' ';
  s.pop();
  std::cout << s.top<int>() << std::endl;
  s.pop();
  return 0 ;
}

【 在 shanshan (shanshan) 的大作中提到: 】
: 要可以存不同类型的数据?
:


--
※ 来源:.Unknown Space - 未名空间 mitbbs.com.[FROM: 128.220.]

[上篇] [下篇] [同主题上篇] [同主题下篇]
[转寄] [转贴] [回信给作者] [修改文章] [删除文章] [同主题阅读] [从此处展开] [返回版面] [快速返回] [收藏] [举报]
 
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996