利用C++模板特性计算各整数类型的最大最小值
生活随笔
收集整理的這篇文章主要介紹了
利用C++模板特性计算各整数类型的最大最小值
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基于C++模板編程,我們可以將一部分計(jì)算放到編譯期來(lái)完成,還能夠給編寫代碼帶來(lái)很多方便。
比如題目中提到的,利用C++模板技術(shù)求各整數(shù)類型的最大最小值。
代碼如下:
// indicates T is signed or unsigned template< typename T > struct TFSigned {enum { fSigned = T(-1) < 0 }; }; // represents the bit length of T template< typename T > struct TBitCount {enum { cBits = sizeof( T ) * 8 }; }; template< typename T, bool fSigned > struct TMinMaxHelper {};template< typename T > struct TMinMaxHelper< T, true/*fSigned*/ > {static const T min = static_cast<T>( static_cast<T>(1) << ( TBitCount<T>::cBits - 1 ) );static const T max = static_cast<T>( ~( static_cast<T>(1) << ( TBitCount<T>::cBits - 1 ) ) ); };template< typename T > struct TMinMaxHelper< T, false/*fSigned*/ > {static const T min = static_cast<T>( 0 );static const T max = static_cast<T>(-1); };template< typename T > struct TMinValue {static const T v = TMinMaxHelper< T, TFSigned<T>::fSigned >::min; }; template< typename T > struct TMaxValue {static const T v = TMinMaxHelper< T, TFSigned<T>::fSigned >::max; };?
代碼很容易看明白,使用以來(lái)也很簡(jiǎn)單:
int _tmain(int argc, _TCHAR* argv[]) {printf("%d, %d\n", TMaxValue<short>::v, TMaxValue<int>::v);printf("%d, %d\n", TMinValue<short>::v, TMinValue<int>::v);getchar();return 0; }輸出:
轉(zhuǎn)載于:https://www.cnblogs.com/quark/archive/2012/09/24/2700440.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的利用C++模板特性计算各整数类型的最大最小值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: excel如何拟合直线(如何在excel
- 下一篇: dota自走棋隐藏英雄