|
y3c-stl 0.4.0
Friendly C++ STL wrapper with automatic stacktrace
|
std:: の標準ライブラリの代わりに y3c:: 以下のクラスを使うことで、例外がcatchされなかった場合や未定義動作の代わりにわかりやすいエラーメッセージとスタックトレースを表示します。 C++初心者におすすめです。
Linux, MacOS, Windows (MSVC, MinGW) で動作確認しています。 スタックトレースの取得と表示に関しては cpptrace ライブラリを使用しています。
↓
こちらから他のサンプルコードと実行結果の例を見ることができます。
でインストールできます。
Meson (>=1.1) をインストールしてください。
pip install meson または sudo apt install mesonbrew install mesonpacboy -S meson以下のコマンドでy3c-stlと依存ライブラリをビルド、インストールできます。
Windowsの場合は meson setup 時の引数で -Dprefix=C:/Users/hoge/y3c などとインストール先を指定するとよいです。 Linux,Macの場合は特にこだわりがなければ何も指定せずデフォルトのまま (/usr/local など) がおすすめです。
また、Windows MSVC の場合は release ビルド(デフォルト)と debug ビルド(meson setup 時に -Dbuildtype=debug を指定)の両方をインストールする必要があります。
-ly3c と -g を渡せばよいです。-I/path/to/y3c/include -L/path/to/y3c/lib -ly3c などとパスも指定する必要があります。-g はなくてもビルドできますが、スタックトレースが表示されなくなります。-std=c++11 またはそれ以上がないとコンパイルエラーになる場合があります。/IC:\path\to\y3c\include と /libpath:C:\path\to\y3c\lib でパスを指定し、 y3c.lib(releaseビルドの場合) または y3cd.lib(debugビルドの場合) を渡してください。$(pkg-config --cflags --libs y3c) と -g を渡せば良いです。PKG_CONFIG_PATH 環境変数に /path/to/y3c/lib/pkgconfig などを追加する必要があります。-std=c++11 またはそれ以上がないとコンパイルエラーになる場合があります。intなどのクラスでない変数については y3c::wrap<int> 、配列 int[5] → y3c::wrap<int[5]>、参照 int& → y3c::wrap<int&>、 生ポインタ int* → y3c::wrap<int*> で置き換えることで、nullptrや範囲外へのアクセス、また寿命が切れた変数へのアクセスかどうかをチェックすることができます。y3c::unwrap() (または unwrap()) 関数を使うことで対応する std:: 以下のクラス、wrap元の型(の参照)に復元できます。 (unwrap後はチェックが行われませんが)std::array::at() → std::out_of_range)、 それがcatchされなかった場合にわかりやすいエラーメッセージとスタックトレースを表示します。std::out_of_range は std::logic_error, std::exception としてもcatchできます。)std::set_terminate() に登録したハンドラーの中で行っているため、 y3c:: のラッパークラス以外が投げた標準のexceptionや、直接 std::terminate() を呼び出した場合もスタックトレースが表示できる場合があります。ただしいずれもチェックされる条件として生ポインタや参照の代わりに y3c::ptr, y3c::wrap_ref などを使用することに加えて、 アクセスする対象も y3c:: のクラスまたは y3c::wrap でラップされている必要があります
リンクはDoxygenによるドキュメントへのリンクです。
#include <y3c/wrap> (y3c独自のユーティリティ関数、STLのクラスに属さないものなど)TT&y3c::wrap<T&>y3c::wrap<const T&>T*y3c::wrap<T*>y3c::wrap<const T*>const y3c::wrap<T*>const y3c::wrap<const T*>#include <y3c/array>std::array<T, N>#include <y3c/vector>std::vector<T>#include <y3c/memory>std::shared_ptr<T>std::make_shared<T>()y3c-stlはMITライセンスの下で公開されています。
依存ライブラリとして cpptrace (MITライセンス), libdwarf (LGPL), rang (Unlicense) を使用しています。