ざ・びぼうろく

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

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()) };
}