• 您的位置我爱Aspx >> VC.Net >> CUJ:普及知识:typeint
  • CUJ:普及知识:typeint

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:48:32  关键字:
  • cout << Value< TypeInt<92>::R >::r << endl; // 92

    对typeint 进行移位

    左移应该补零,因此我们只须附加正确数目的0:

    template <typename T, int n>

    struct LShift

    { typedef typename LShift<T,n-1>::R *R; };

    template <typename T>

    struct LShift<T,0>

    { typedef T R; };

    然而,我们的typeint 表示法不允许前导的0, 因此我们必须特别处理可能发生的为0(char)的typeint的移位:

    template <int n>

    struct LShift<char,n>

    { typedef char R; };

    最后,我们必须提供一个特化以消除为0的typeint左移0位时的歧义。否则的话,将会在偏特化间发生二义性。

    template <>

    struct LShift<char,0>

    { typedef char R; };

    在这个实现上,右移总是补0。因为基于这个实现,传入的参数上是没有前导的0的,这意谓着只需简单地反引用typeint适当的次数[注3]:

    template <typename T, int n>

    struct RShift {

    typedef typename Deref<typename RShift<T,n-1>::R>::R R;

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:自己动手丰衣足食-搞定网页乱码
    下一篇:关于VC代码的编写和调试(三)
  • 相关文章