標準ライブラリの実装から学ぶ場合、まず、標準ライブラリは、通常のユーザーが記述したコードには適用されない特定の厳しい制約に従わなければならないことに注意してください。また、標準 C++ ライブラリによって行われる操作のいくつかはやや難解であり、それらが通常のユーザーのコードで使用されたことがあるかどうか心配です (会社に低レベルのライブラリ チームがある場合、同様のことを行う可能性がありますが、 )。特に、標準ライブラリが従わなければならない制約は、使用される名前のいずれも、ユーザーがどこでも使用する名前と競合しないということです。ユーザーが変なマクロを定義する可能性があるため、標準ライブラリは、ヘッダー ファイルなど、ユーザーに表示されるコンテキストで標準ライブラリ用に予約された名前を使用する必要があります。
- クラス、関数、列挙型などの標準 C++ ライブラリで使用される名前、またはそのタイムプレート (該当する場合) は予約されています。
- アンダースコアの後に大文字が続くすべての名前、または 2 つの連続するアンダースコアを含む名前は、すべてのコンテキストで予約されています。
- 他にも予約された名前がいくつかありますが、マクロ名のコンテキストではほとんど予約されていないため、通常はヘッダーでは使用されません。
標準 C++ ライブラリから特にコピーしたくないのは、インクルード ガードの命名です。これらは通常、1 つまたは 2 つのアンダースコアで始まり、すべて大文字です。ユーザーは、これらの識別子の使用が明確に許可されていない限り、これらの識別子を使用することはできません (たとえば、 and を使用できますが__FILE__
、__LINE__
マクロによって展開できるプログラム内のどこにでも書き込むことは許可されていません_FOOBAR
(つまり、書けると思います"_FOOBAR"
)。
あなたの実際の質問に答えるには: 私が知っているすべての標準 C++ ライブラリの実装 (libstdc++、libc++、Dinkumware、RougeWave、および私自身のもの) は、「醜い」名前を使用して記述されており、それらをこの形式に変換するプログラムはありません。基本的に、どのプログラムも多くの例外を処理する必要がありますが、これは非常に現実的ではありません。標準 C++ ライブラリの実装者は、変な名前に慣れてしまうだけだと思います。私の実装では、単純なスクリプトを使用して醜い化を取り消すことができるように、すべてに共通のプレフィックスを付けて名前を付けるように努力しましたが、sed
どこでもそのパターンに従っていません。