是否可以定義一個類型,它總是會佔用已定義類型大小的一半?如何定義相對於其他類型大小的類型?
typedef int16_t myType;
typedef int8_t myTypeHalf;
所以,當我決定從改變的myType int16_t到int32_t,myTypeHalf將自動更改爲int16_t,所以我不會」不用擔心我可能會忘記更換myTypeHalf。
typedef int32_t myType;
typedef int16_t myTypeHalf;
是否可以定義一個類型,它總是會佔用已定義類型大小的一半?如何定義相對於其他類型大小的類型?
typedef int16_t myType;
typedef int8_t myTypeHalf;
所以,當我決定從改變的myType int16_t到int32_t,myTypeHalf將自動更改爲int16_t,所以我不會」不用擔心我可能會忘記更換myTypeHalf。
typedef int32_t myType;
typedef int16_t myTypeHalf;
您可以定義一組模板特像這樣:
template<size_t Bits> struct SizedInt;
template<> struct SizedInt<8> { using type = std::int8_t; };
template<> struct SizedInt<16>{ using type = std::int16_t; };
template<> struct SizedInt<32>{ using type = std::int32_t; };
template<> struct SizedInt<64>{ using type = std::int64_t; };
template<size_t Bits>
using SizedInt_t = typename SizedInt<Bits>::type;
然後,你可以這樣定義你的類型:
using myType = std::int32_t;
using myTypeHalf = SizedInt_t<sizeof(myType) * 4>;
當然,你也可以使用更復雜的數學表達式來處理特殊情況(例如myType
是std::int8_t
),但我認爲這可以讓人想到。
這看起來更靈活,因爲它使用大小而不是類型。現在你不需要擔心無符號類型。 +1 – NathanOliver
試着這麼做:
template<typename T>
struct HalfType
{
typedef int8_t Type;
};
和一堆專業化的,如:
template<>
struct HalfType<int32_t>
{
typedef int16_t Type;
};
..............
可能的案件的數量並不大。你可以簡單地指定它們。一旦傳遞的類型沒有hallf類型,默認模板將會發出int8_t
。使用應該看起來像
HalfType<somePassedType>::Type myVarOfHalfTheSize;
而如果'myType'是'int8_t'? – YSC
然後'myTypeHalf',也需要是'int8_t',但問題更多的是是否可以定義這樣的條件/依賴關係。或者是在評論中提及它的唯一方法,並希望後面的任何人使用代碼來處理評論指示? – Riko