私は C++11 のいくつかの新機能を調査してきましたが、それらのいくつか、特にユーザー定義リテラルに非常に感銘を受けました。
これらにより、リテラルを生成するために何を行うかを制御する999_something
形式のリテラルを定義できます。したがって、次を使用する必要はもうありません。something
999
#define MEG * 1024 * 1024
int ten_meg = 10 M;
1_000_000_blah
Perlの可読性に匹敵するように、アンダースコアを多数実装するのはいいことだと思っていました.
1101_1110_b
や などのバイナリ値にも便利です0011_0011_1100_1111_b
。
明らかに_
文字のため、これらは C 文字列を処理する raw モード タイプである必要がありますが、私はそれで問題ありません。
私が理解できないのは、オペランドのサイズに基づいて異なる型を提供する方法です。例えば:
1101_1110_b
(もちろん8ビットであるとchar
仮定して)を与える必要があります:char
0011_0011_1100_1111_b
16 ビット タイプを提供します。
リテラル演算子関数自体からオペランドの長さを取得できますがoperator""
(数字の文字を数えることによって)、戻り値の型は関数に固定されているように見えるため、これに基づいて別の型を返すことはできません。
これは、ユーザー定義型フレームワーク内の単一のサフィックスで実行できますか?それとも、_b
手動で型を分割して (_b8
など_b16
)、ほとんど重複した機能を提供する必要がありますか?