可能な最大値が与えられた場合、そのような数値を 10 進数形式でテキストとして書き込むために必要なスペースを単純に表現するにはどうすればよいでしょうか?
実際のタスク: Linux で gcc を使用して、プロセス ID ( pid_t
) を固定長でログに記録します。std::setw()
iomanipulatorで使用するコンパイル時の式があるとよいでしょう。
linux/threads.hヘッダーに、PID_MAX
プロセスに割り当てられた最大 pid の値が含まれていることがわかりました。だから持っている
#define LENGTH(t) sizeof(#t)-1
これLENGTH(PID_MAX)
はコンパイル時の式になりますが、残念ながらこの数値は 16 進数で定義されています。
#define PID_MAX 0x8000
私の現在の最善の解決策は少し奇妙です
static_cast<int>( ::floor( ::log(PID_MAX)/::log(10) + 1 ) );
ただし、これは実行時に計算され、math.hの関数を使用します。