所以這個問題出現了,雖然做了一些簡單的編碼,但請考慮以下幾點:C++ 11,整數類型由範圍決定?
for(unsigned int x=0x00000000; x<0xFFFFFFFF; x++)
{
// ...
}
上面的代碼,按預期工作假設「的sizeof(unsigned int類型)> = 4」,但我們知道,在某些平臺上,這可能是不正確的,因此我interrested的東西都這樣;
for(RangeBasedInt<0x00000000, 0xFFFFFFFF>::type x=0x00000000; x<0xFFFFFFFF; x++)
{
// ...
}
其中「RangeInt」是一個模板,與「類型」是最小整數型大到足以容納從MINIMUM(00000000)至最大值(0xFFFFFFFF的)值的範圍內;
template<int MINIMUM, int MAXIMUM>
struct RangeBasedInt
{
// Type based upon MINIMUM and MAXIMUM
typedef /* MAGIC */ type;
};
所以問題就在於它的簡單性;
- 這是在標準庫的某處實現的嗎?
- 如果不是,是否有實現這個庫,否則我將不得不建立自己的基於的std :: numeric_limits
如果下限(或兩者都是)爲負值會怎麼樣?你會如何處理? – Skeen
然後你的'RangeBasedInt'實現變得更加複雜。 :-)然而,它只是像你想要的那樣複雜。如果你有一個限制表達爲負數,你仍然可以'decltype'該文字(假設它是一個文字)並獲得一個有符號的整數類型來表示它。如果你想做一個真正的一般'RangeBasedInt',你可以做到這一點。它不存在於標準庫中。 decltype會有很大的幫助。 –
我不相信2.14.2,說出你在說什麼,如果我錯了,請給我一個參考資料。GCC和Clang似乎都會爲限制(0x0,0xFF)產生int,其中unsigned char將是最小的類型。 (可能是編譯器不完善) – Skeen