ざ・びぼうろく

エンジニアリング周りの知識を雑に吐き出すブログです

ブログを作り直しました

以前のブログはこちらです。

ryo-s1126.hatenablog.com

特に大きな理由はないのですが、社会人になってから環境や興味など、自分の中で様々な変化があったので心機一転ブログを作り直すことにしました。

今後はこのブログに加えて Zenn にも記事を書ければよいなと思っています。
大まかに以下のような棲み分けをしていくつもりです。

  • ブログ
    • 結構雑に書く。文章も箇条書きで。本当に備忘録のような感じです。
  • Zenn
    • しっかりとした記事を書きたいとき。文章もちゃんと考える

自分の興味に従って雑多なジャンルの記事を書いていくつもりです。
改めてよろしくお願いします。

Visual Studio 2022 に toml++ を導入する

VS2022 に不慣れで少しだけ詰まったのでメモしておきます。

実行環境

使用ライブラリ

marzer.github.io

toml++ は C++ で使用できる toml 1.0 にも対応している TOML パーサです。
2023/1 現在でも少しずつ更新が行われています。

toml++ のダウンロード

公式ではいくつかインストールの方法が紹介されていますが、
header only ライブラリとして利用できるようなので、ソースをそのままプロジェクトにコピーしてしまうことにします。

marzer.github.io

ファイルは、上記リンクの Single-header flavour にある toml.hpp をダウンロード or コピーしてください。

C++ のバージョン変更

VS2017 以降のバージョンでは規定でコンパイラのターゲットが C++14 になっています。

learn.microsoft.com

toml++ は C++17 以降の実行環境が要求されるため、生成仕立てのプロジェクトでは以下のエラーメッセージが表示されます。

toml++ requires C++17 or higher. For a C++11 TOML library see https://github.com/ToruNiina/toml11

これを修正するために以下の手順でターゲットを C++17 以降に変更します。

  • 「プロジェクト」タブの「<プロジェクト名>のプロパティ」を開く
  • 「構成プロパティ / C/C++ / 言語」を開いて C++ 言語標準を変更する

以上で toml++ の導入は完了です。

後はチュートリアルに沿って実装すれば toml ファイルを読み込めるようになります。

// 適当な例
std::optional<Param> read_parameter(std::string_view path) {
  auto tbl = toml::parse_file(path);
  auto loop = tbl["loop"].value<int>();
  auto re = tbl["origin"]["re"].value<int>();
  auto im = tbl["origin"]["im"].value<int>();
  if (!loop.has_value() || !re.has_value() || !im.has_value()) {
    return std::nullopt;
  }

  return Param{ loop.value(), Complex(re.value(), im.value()) };
}