科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件STL泛型编程与设计新思维

STL泛型编程与设计新思维

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

STL是C 标准程序库中最具革命性的部分,也是C 标准程序库中最重要的组成部分

作者:徐景周 来源:51CMM 2007年10月28日

关键字: Linux

  • 评论
  • 分享微博
  • 分享邮件
下面是一个简单的泛化Singleton模式的实现(不考虑线程因素)

template
< class T,
 template<class> calss CreationPolicy = CreateUsingNew,
 template<class> class LifetimePolicy=DefaultLifetime,

classs SingletonHolder
{
 public:
  static T& Instance()
  {
   if(!pInstance_)
   {
    if(destroyed_)
    {
     LifetimePolicy<T>::OnDeadReference();
     destroyed_ = false;
    }
    pInstance_ = CreationPolicy<T>::Create();
    LifetimePolicy<T>::SchedultCall(&DestorySingleton);
   }
   return *pInstance_;
  }
 private:
  static void DestroySinleton()
  {
   assert(!destroyed_);
   CreationPlicy<T>::Destroy(pInstance_);
   pInstance_ = 0;
   destroyed_ = true;
  } SingletonHolder();
  SingletonHolder (const SingletonHolder &);
  SingletonHolder & operator= (const SingletonHolder &); 

  Static T* pInstance_;
  Static bool destroyed_;
};

  Instance()是SingletonHolder开放的唯一一个public函数,它在CreationPolicy、LifetimePolicy中打造了一层外壳。其中模板参数类型T,接收类名,既需要进行Singleton的类。模板参数内的类模板缺省参数CreateUsingNew是指通过new操作符和默认构造函数来产生对象,DefaultLifetime是通过C++规则来管理生命期。 LifetimePolicy<T>中有二个成员函数,ScheduleDestrution()函数接受一个函数指针,指向析构操作的实际执行函数,如上面DestorySingleton析构函数;OnDeadReference()函数同上面一般C++中同名函数相同,是负责发现失效实例来抛出异常的。CreationPlicy<T>中的Create()和Destroy()两函数是用来创建并摧毁具体对象的。

  下面是上述泛化Singleton模式实现的使用:

  1、应用一

class A{};
typedef SingletonHolder<A, CreateUsingNew> SingleA;

  2、应用二

class A{};
class Derived : public A {};
template<class T> struct MyCreator : public CreateUsingNew<T>
{
 static T* Create()
 {
  return new Derived;
 }
 static void Destroy(T* pInstance)
 {
  delete pInstance;
 }
}
typedef SingletonHolder<A,MyCreator> SingleA;

  通过上面示例可以看出, SingletonHolder采用基于plicy设计实现,它将Singleton对象分解为数个policies,模板参数类中CreationPolicy和LifetimePolicy相当于二个policies封装体。利用它们可以协助制作出使用者自定义的Singleton对象,同时还预留了调整和扩展的空间。由此而得,泛型组件(generic components),是一种可复用的设计模板,结合了模板和模式,是C++中创造可扩充设计的新方法,提供了从设计到代码的简易过渡,帮助我们编写清晰、灵活、高度可复用的代码。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章