自己完結型ライブラリを実装するさまざまな単一ファイルのクロスプラットフォーム C/C++ ヘッダー。
図書館 | 説明 | 最新バージョン | 言語 |
---|---|---|---|
かわいい_c2 | プリミティブ、ブール結果および/または多様体の生成、シェイプ キャスト/スイープ テスト、レイキャストの 2D 衝突検出ルーチン | 1.10 | C/C++ |
キュートネット | セキュリティ スキームが組み込まれた UDP 上のオプションの信頼性レイヤーを必要とするゲーム用のネットワーク ライブラリ | 1.03 | C/C++ |
かわいいタイル張り | JSON 形式にエクスポートされたタイル マップ用の非常に効率的なローダー | 1.07 | C/C++ |
かわいい_アスプライト | .ase/.aseprite ファイルをコンパクトで便利な構造体コレクションに解析します。 | 1.04 | C/C++ |
かわいい音 | モノラル/ステレオでのロード/再生/ループ (プラグインあり)/パン WAV + OGG (OGG 用 stb_vorbis ラッパー)、高性能カスタム ミキサー、音楽 + クロスフェードのサポート | 2.08 | C/C++ |
かわいい数学 | SSE 組み込み関数によるプロフェッショナル レベルの 3D ベクトル演算 | 1.02 | C++ |
かわいい_png | PNG のロード/保存、テクスチャ アトラス コンパイラ、DEFLATE 準拠のデコンプレッサー | 1.05 | C/C++ |
キュートスプライトバッチ | ランタイム 2D スプライト バッチャー。アトラスをメモリ内にオンザフライで構築します。ディスク上でテクスチャ アトラスをプリコンパイルする必要がなく、高パフォーマンスのレンダリングのためにあらゆる目的 (2D ゲームなど) にスプライト バッチャーを実装するのに役立ちます。 | 1.06 | C/C++ |
かわいい同期 | 読み取り/書き込みロックやスレッドプール/タスク システムなどの実用的な同期プリミティブのコレクション | 1.01 | C/C++ |
かわいい_tls | TCP 経由で Web サイトへの TLS 接続を作成します。HTTPS リクエストに便利です。 | 1.01 | C/C++/Obj-C |
通常、これらのヘッダーには依存関係がなく、ソースに直接組み込まれることを目的としています (ファイルの先頭にある特定のドキュメントについては、各ヘッダーを確認してください)。各ヘッダーには LIBNAME_IMPLEMENTATION シンボルがあります。これをコード内の単一の翻訳単位に追加し、ライブラリ シンボルを定義するためにその直後にヘッダーを含めます。それ以外の場合は、通常どおりヘッダーを含めてください。
一部のヘッダーにはサンプルコードまたはデモも含まれています。このリポジトリでは、対応するサンプル フォルダーまたはテスト フォルダーを探すだけです。サンプル フォルダーは、特定のヘッダーの使用方法を理解するのに特に役立ちます。
これは、cute_headers の discord チャットへのリンクです。気軽に立ち寄って、質問したり、提案したり、ディスカッションしたりできます。誰かがcute_headersを使用したことがあれば、あなたの経験を聞くのは素晴らしいことです! https://discord.gg/2DFHRmX
私と連絡を取るもう 1 つの簡単な方法は、twitter @randypgaul を利用することです。
- 単一のファイルを作成する意味は何ですか?ヘッダーに実装関数と静的関数があるのはなぜですか?
これらのヘッダーを含めることは、通常のヘッダーを含めることと似ています。ただし、実装を定義するには、各ヘッダーは次のようになります。
// Do this ONCE in a .c/.cpp file
#define LIBNAME_IMPLEMENTATION
#include "libname.h"
// Everywhere else, just include like a typical header
#include "libname.h"
これにより、ファイルがヘッダー + C ファイルの組み合わせに 1 回だけ変換されます。これのポイントは次のとおりです。A) ヘッダーの処理やヘッダーの送信は簡単で、zip ファイルなどは必要なく、単一のファイルをコピーして貼り付けるだけです。 B) ビルド スクリプトは面倒ですが、これらの単一ファイルのライブラリは、単一のビルド スクリプトを変更せずに任意のプロジェクトに統合できます。
- すべてのコードをヘッダー内に記述するとコンパイル時間が無駄になるのではありませんか?
ヘッダー実装のコンパイル時間が遅いという偏見は、インライン化されたコードとテンプレート スパムから来ています。どちらの場合も、すべての単一の変換単位がヘッダーを介して関数のインライン バージョンを配置するか、テンプレートの場合はさまざまな型固有の関数を生成する必要があります。リンカーが起動し、翻訳単位を結合して重複したシンボルを削除する必要があると、事態はさらに悪化します。多くの場合、リンカーはシングルスレッド タスクであり、ビルド時間のボトルネックになる可能性があります。
適切に構成された単一ファイルのヘッダーでは、テンプレートは使用されず、インラインの使用は控えめになります。さらに、適切に構築された単一ファイル ヘッダーでは、#define を使用して実装 (関数定義とシンボル) を単一の変換単位に配置します。このように、ビルド時間に関する限り、よく作られた単一ファイルのヘッダーは、C コンパイラーが遭遇できる最高のものとなります。特にヘッダーがオプションで不要な機能を #define できる場合は特にそうです。
- これらのヘッダーのみのライブラリは、単なる新しい流行ではないでしょうか?
個人的には、それが流行なのかどうかはよくわかりませんが、これらのファイルは単なるヘッダーではありません。これらは、末尾に .C ファイル部分 (実装) が付いているヘッダーです。これは C プリプロセッサで 2 つの異なるファイルが結合されたものですが、ユーザーが #define LIB_IMPLEMENTATION を実行しない限り、実装部分は表示されません。この定義ステップは、これらのヘッダーを使用するために必要な唯一の統合ステップです。
残念ながら、優れたヘッダー ライブラリを作成するのはかなり難しいため、世の中にあるランダムなヘッダー ライブラリはおそらく良いものではありません。 STB と RJM は非常に優れたヘッダー ライブラリであり、優れたヘッダー ライブラリがどのようなものかを理解するための良い参考資料となります。 Mattias Gustavsson には私のお気に入りのヘッダー コレクションがあります。
- ライセンスとは何ですか?
各ライブラリには、ファイルの最後にライセンス情報が含まれています。パブリック ドメインと zlib のどちらかを選択できます。
- 以前見たヘッダーを探していたのですが、見つかりません。どこに行ったの?
不人気なヘッダーやあまり役に立たないヘッダーの一部は非推奨となり、現在はここに存在します。
- *より高レベルのライブラリはありますか?これらは少し低レベルすぎるように思えます。
かわいいヘッダーは確かにかなり低レベルです。彼らは特定の問題を解決します。より高いレベルのゲーム作成フレームワークを探している場合は、ここで見られるさまざまな低レベルの Cute ヘッダーを主に上に構築された 2D ゲーム作成フレームワークである Cute Framework を試してみることをお勧めします。