私は相対的に C/C++ 初心者ですが、C# や他の多くの言語の経験があり、現在 C++ でゲーム エンジンを構築しています。
入力システム (キー/マウス/ジョイスティック) については、列挙型ではなく、文字列リテラルを使用してゲーム固有の入力イベントの構成を簡素化するというアイデアがありました。しかし、C コンパイラがそれをどのように最適化するかは完全にはわかりません。文字ごとの文字列比較を毎回行うのは非効率的かもしれません。
基本的な考え方は次のとおりです。デバイス イベントから「ゲーム固有のイベント」へのマッピングは、int/enum キーと const char * 値を持つ std::map になります。
Mappings[ KEY_X ] = "Jump";
Mappings[ KEY_Y ] = "Shoot";
Mappings[ MOUSE_1 ] = "Shoot";
これらは、ハードコーディングされたり、構成ファイルからロードされたりする可能性があります (文字列により、解析と保存が簡素化され、新しいイベント タイプが追加されます)。
その後、ゲームでは、ゲーム固有のイベントのみを扱うことができます。
if ( IsDown( "Jump" ) ) {
}
if ( IsSinglePress( "Shoot" ) ) {
}
問題は、すべての文字列リテラルと const char * が魔法のように最適化され、列挙型や整数定数と同じくらい効率的になるでしょうか? 例えば
if ( IsDown( GAMEKEY_SHOOT ) ) {
// ...
}
それとも、文字列比較などを行うのでしょうか? コンパイラが同じ文字列リテラルのインスタンスを見て、それを一度保存し、全体で単一のポインター値を使用することを願っていますが、よくわかりません。