我爱Aspx >> VC.Net >> CUJ:普及知识:typeintcout << Value< TypeInt<92>::R >::r << endl; // 92
左移应该补零,因此我们只须附加正确数目的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;
【我对这篇文章有话说?】
关于VC代码的编写和调试(三)[05-21]
通过串口收发短消息(上)[05-21]
A LITE VIRUS ABOUT PE INFECT[05-21]
让应用程序从IE中获取键入的网址[05-21]
Don Box:Smart Pointers : What..[05-21]
企业上网的几个理由[05-21]
如何在Linux下实现设备的配置[05-21]
非窗口类中使用定时器的方法(二..[05-21]
非窗口类中使用定时器的方法(一..[05-21]
非窗口类中使用定时器的方法[05-21]