前提・実現したいこと
C++20
テンプレート引数に与えられた整数範囲に基づいて変数の型を変えたい
具体的には、
0UINT8_MAX -> uint8_tUINT16_MAX -> uint16_t
UINT8_MAX
UINT16_MAX 〜UINT32_MAX → uint32_t
となるようなテンプレートの書き方を教えていただけないでしょうか。
該当のソースコード
具体的には以下のようなソースコードを通したいです。
auto??? の部分が最終的にはtemplate <uint64_t Range>から推測されるものになると思います。
C++
1template <uint64_t Range> 2class FitSizeVariable 3{ 4 auto??? Variable; 5} 6 7TEST() 8{ 9 FitSizeVariable<UINT8_MAX> val1 = FitSizeVariable<UINT8_MAX>(); 10 FitSizeVariable<UINT16_MAX> val2 = FitSizeVariable<UINT16_MAX>(); 11 FitSizeVariable<UINT32_MAX> val3 = FitSizeVariable<UINT32_MAX>(); 12 13 ASSERT_TRUE(sizeof( val1) == sizeof(uint8_t)) 14 15 ASSERT_TRUE(sizeof( val2) == sizeof(uint16_t)) 16 17 ASSERT_TRUE(sizeof( val3) == sizeof(uint32_t)) 18 19} 20 21 22
数値じゃなくてそのままuint8_tなど型を指定するのではダメなんですか?
(ダメだから聞いているんだとは思いますが、たまに「よく考えたら必要なかった」という質問ってあるので、念の為)
とある数値からその数値が格納できる最低限の整数型を確保したいのです。
(コンパイル時に)
具体的には空きメモリー領域を十分に指すことのできる”最低限”の整数型がほしいです。組み込みで利用するので極論1バイトでも短縮させたいのです。
リンカーで空きメモリ領域を調べて、その定数が例えば0xAAAA0000〜0xAAAAFFFFが空きだとしたときは0xFFFF分の2バイトだけ変数化したいのです。空きメモリ量は、コンパイルするたびに変わってしまいますから、
数値から必要なサイズを割り出したく思ってます。
回答2件
あなたの回答
tips
プレビュー