科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件让后门能够偏特化

让后门能够偏特化

  • 扫一扫
    分享文章到微信

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

对类的后门扩展功能添加偏特化支持。

作者:guanwl 来源:CSDN 2008年2月5日

关键字: 偏特化 后门 Linux

  • 评论
  • 分享微博
  • 分享邮件
让后门函数能够偏特化
在上一篇《巧用成员模板函数为你的类留下后门》一文中,说了利用成员模板函数方便的扩展类的机制。但这个机制还有一点不足之处,就是不能对这个后门进行偏特化。例如:
    struct cls
    {
       template < typename T, typename U >
       void postern(T& t, U& u)
       {
       }
    };
对这个类cls的后门函数postern,我们只能对它进行全特化。现在的C++还不支持模板函数的偏特化。可是有的时个我们的扩展真的需要偏特化,所以得想点办法来完成这个事情。办法就是把这个后门函数的偏特化需求转换为一个类的偏特化。下面我们来完成这个过程。请看下面的这个类定义。
    struct cls
    {
       //后门函数
       template< typename T, typename U>
       void postern( const T& t, const U& u)
       {
           Cpostern<T,U>::postern(t,u,*this);
       }
 
    private:
       //一个用来做测试用的私有成员函数
       void fun(void)
       {
           cout << "测试用的私有成员" << endl;
       }
 
 
       //内部嵌套的用来对后门函数偏特化的类
       template < typename T, typename U>
       struct Cpostern
       {
           static void postern( const T& t, const U& u ,cls& c)
           {
              c.fun();
              cout << "<>" << __LINE__ << endl;
           }
       };
 
    };
这个cls类,有三个成员。 一个后门函数postern, 一个私有函数fun, 一个嵌套类Cpostern。现在的后门函数postern只完成一件事情:调用嵌套类Cpostern中的pestern。通过这次调用,我们把偏特化工作由针对函数成功的转向了针对类。现在我们只需偏特化嵌套类Cpostern就行了。例如我们可以做如下的偏特化。
    template <typename T>
    struct cls::Cpostern< T, int>
    {
       static void postern(const T& t, const int& u ,cls& c)
       {
           c.fun();
           cout << "special" << __LINE__ << endl;
       }
    };
同样,我们这次的偏特化没有对原始的cls做一丝一毫的更改。
 
 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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