toml literal

_tomlリテラル #

""_tomlリテラルによって、TOMLファイルをその場でフォーマットできます。

#include <toml.hpp>

int main()
{
    using namespace toml::literals::toml_literals;

    const auto v = "a = 42"_toml;

    assert(v.at("a").as_integer() == 42);

    return 0;
}

改行を含む場合、生文字列リテラルが便利です。

#include <toml.hpp>

int main()
{
    using namespace toml::literals::toml_literals;

    const auto v = R"(
        a = 42
        b = "foo"
    )"_toml;

    assert(v.at("a").as_integer() == 42);
    assert(v.at("b").as_string()  == "foo");

    return 0;
}

値が単体で書かれていた場合、その値が返されます。

#include <toml.hpp>

int main()
{
    using namespace toml::literals::toml_literals;

    const auto a = "42"_toml;
    const auto b = "12:34:56"_toml;

    assert(v.at("a").as_integer() == 42);
    assert(v.at("b").as_local_time().hour   == 12);
    assert(v.at("b").as_local_time().minute == 34);
    assert(v.at("b").as_local_time().second == 56);

    return 0;
}

TOMLは数値のみからなるキーを許可しています。 よって、[1]はテーブル名として合法です。

[1]のようにテーブル定義と配列の区別がつかない場合、テーブル定義が優先されます。

配列として解釈させるには、trailing commaを使用してください。

#include <toml.hpp>

int main()
{
    using namespace toml::literals::toml_literals;

    const auto t = "[1]"_toml;  // {1 = {}}
    const auto a = "[1,]"_toml; // [1,]

    assert(t.is_table());
    assert(t.at("1").is_table());

    assert(a.is_array());
    assert(a.at(0).as_integer() == 1);

    return 0;
}