boost.png (6897 bytes)整數類型選擇模板

<boost/integer.hpp> 的類型選擇模板可以基於特定的屬性,如位數或最大值,選擇相應的整數類型。在解決泛型編程的問題時,這一工具特別有用。

目錄

摘要

namespace boost
{
// 從最小整數得到快速整數
template< typename LeastInt >
struct int_fast_t
{
typedef implementation_supplied fast;
};

// 有符號的
template< int Bits >
struct int_t
{
typedef implementation_supplied least;
typedef int_fast_t<least>::fast fast;
};

// 無符號的
template< int Bits >
struct uint_t
{
typedef implementation_supplied least;
typedef int_fast_t<least>::fast fast;
};

// 有符號的
template< long MaxValue >
struct int_max_value_t
{
typedef implementation_supplied least;
typedef int_fast_t<least>::fast fast;
};

template< long MinValue >
struct int_min_value_t
{
typedef implementation_supplied least;
typedef int_fast_t<least>::fast fast;
};

// 無符號的
template< unsigned long Value >
struct uint_value_t
{
typedef implementation_supplied least;
typedef int_fast_t<least>::fast fast;
};
} // namespace boost

最容易操作的類型

int_fast_t 類模板將它的輸入類型映射為處理器最容易操作的稍大的類型,或者如果輸入類型已經是易於操作的就返回它本身。例如,在處理一串字符時,如果先將它們轉換為 int 則會處理得更快。唯一的模板參數,即輸入類型,必須是除了 bool 以外的內建整數類型。可以像有符號整數類型一樣使用無符號整數類型。輸出類型由類成員 fast 給出。

實現說明
缺省的,輸出類型等同於輸入類型。最後,該代碼的實現要對每個平台進行特化,在內建類型和最易操作類型之間給出精確的映射。此外,並不保證輸出類型確實比輸入類型更容易操作。

指定大小的類型

int_t, uint_t, int_max_value_t, int_min_value_t, 和 uint_value_t 類模板根據給定的模板參數查找最合適的內建整數類型。該類型由類成員 least 給出。該類型的最易操作類型由類成員 fast 給出。下表描述了各個模板的標準。

Sized Type 類模板的標準
類模板 模板參數映射
boost::int_t 至少具有給定位數的最小內建有符號整數類型,給定位數包含符號位。模板參數應為一個正數。如果參數大於 long 的位數,將導致編譯錯誤。
boost::uint_t 至少具有給定位數的最小內建無符號整數類型。模板參數應為一個正數。如果參數大於 unsigned long 的位數,將導致編譯錯誤。
boost::int_max_value_t 支持以給定位值作為最大值的最小內建有符號整數類型。模板參數應為一個正數。
boost::int_min_value_t 支持以給定位值作為最小值的最小內建有符號整數類型。模板參數應為一個負數。
boost::uint_value_t 支持以給定位值作為最大值的最小內建無符號整數類型。模板參數應為一個正數。

例子

#include <boost/integer.hpp>

//...

int main()
{
boost::int_t<24>::least my_var;
//...
}

示範程序

程序 integer_test.cpp 簡單地示範了對各種 sized type 類模板的實例化結果。

原理

該頭文件中的模板的設計原理包括:

其它選擇

如果可以預先知道位數,則更適合使用 <boost/cstdint.hpp> 所提供的類型。

鳴謝

The author of most of the Boost integer type choosing templates is Beman Dawes. He gives thanks to Valentin Bonnard and Kevlin Henney for sharing their designs for similar templates. Daryle Walker designed the value-based sized templates.


Revised May 20, 2001

© Copyright Beman Dawes 1999. Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.