Introduction on toml11https://toruniina.github.io/toml11/ja/Recent content in Introduction on toml11Hugojaparsing fileshttps://toruniina.github.io/toml11/ja/docs/features/parsing_files/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/parsing_files/<h1 id="ファイル文字列をパースする"> ファイル・文字列をパースする <a class="anchor" href="#%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e3%83%91%e3%83%bc%e3%82%b9%e3%81%99%e3%82%8b">#</a> </h1> <p>toml11では、<code>toml::parse</code> や <code>toml::try_parse</code> を使って、ファイルや文字列、バイト列をパースすることができます。</p> <p>これらは成功時に <code>toml::value</code> を返します。 ファイルは常にテーブルになりますが、返り値が <code>toml::table</code> でないことに気を付けてください。 <code>toml::value</code> はファイルに関するメタデータを持っており、 <code>toml::table</code> は <code>std::unordered_map&lt;std::stirng, toml::value&gt;</code> のエイリアスでしかありません。 メタデータを返すために、 <code>toml::table</code> ではなく <code>toml::value</code> を返しています。 ファイルのルートに対応する <code>toml::value</code> は常に <code>table_type</code> を持ちます。</p> <h2 id="ファイルをパースする"> ファイルをパースする <a class="anchor" href="#%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e3%83%91%e3%83%bc%e3%82%b9%e3%81%99%e3%82%8b">#</a> </h2> <p>ファイルをパースする際は、 <a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/#parse"><code>toml::parse</code></a> または <a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/#try_parse"><code>toml::try_parse</code></a> を使います。</p> <h3 id="tomlparse"> <code>toml::parse</code> <a class="anchor" href="#tomlparse">#</a> </h3> <h4 id="stdstringでファイル名を指定する"> <code>std::string</code>でファイル名を指定する <a class="anchor" href="#stdstring%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e5%90%8d%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b">#</a> </h4> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/#parse"><code>toml::parse</code></a> は、文字列でファイル名を受け取り、そのファイルを開いてパースします。</p> <p>以下のサンプルは、<code>input.toml</code>というファイルをパースし、<code>title</code>という変数を文字列として取り出し、出力するコードです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;iostream&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value input <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse(<span style="color:#e6db74">&#34;input.toml&#34;</span>); </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>cout <span style="color:#f92672">&lt;&lt;</span> input.at(<span style="color:#e6db74">&#34;title&#34;</span>).as_string() <span style="color:#f92672">&lt;&lt;</span> std<span style="color:#f92672">::</span>endl; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h4 id="stdfilesystempathでファイルを指定する"> <code>std::filesystem::path</code>でファイルを指定する <a class="anchor" href="#stdfilesystempath%e3%81%a7%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b">#</a> </h4> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/#parse"><code>toml::parse</code></a> には、<code>std::filesystem::path</code>を渡すことも可能です。</p> <p>当然ですが、<code>&lt;filesystem&gt;</code>がサポートされるC++17以降でなければ使用できません。</p> <h4 id="stdistreamで入力ストリームを指定する"> <code>std::istream</code>で入力ストリームを指定する <a class="anchor" href="#stdistream%e3%81%a7%e5%85%a5%e5%8a%9b%e3%82%b9%e3%83%88%e3%83%aa%e3%83%bc%e3%83%a0%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b">#</a> </h4> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/#parse"><code>toml::parse</code></a> には、<code>std::istream</code>を渡すことも可能です。</p>getting valueshttps://toruniina.github.io/toml11/ja/docs/features/value/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/value/<h1 id="値を取り出す"> 値を取り出す <a class="anchor" href="#%e5%80%a4%e3%82%92%e5%8f%96%e3%82%8a%e5%87%ba%e3%81%99">#</a> </h1> <p>ここでは、 <code>toml::value</code> が格納している値にアクセスする方法を説明します。</p> <h2 id="メンバ関数を使って値にアクセスする"> メンバ関数を使って値にアクセスする <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e5%80%a4%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b">#</a> </h2> <h3 id="is_something-と-as_something"> <code>is_something</code> と <code>as_something</code> <a class="anchor" href="#is_something-%e3%81%a8-as_something">#</a> </h3> <p><code>toml::value</code> は <code>is_boolean()</code> や <code>is_integer()</code> などのメンバ関数を持っており、 これらを使うと持っている型を調べることができます。</p> <p>また、 <code>as_boolean()</code>, <code>as_integer()</code> などのメンバ関数も持っており、 これらを使ってその型にアクセスすることができます。</p> <p>完全なリストは <a href="https://toruniina.github.io/toml11/ja/docs/reference/value/#is_xxx"><code>toml::value</code> のリファレンス</a> を参照してください。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>toml<span style="color:#f92672">::</span>value v <span style="color:#f92672">=</span> <span style="color:#75715e">/* ... */</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(v.is_integer()) </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>cout <span style="color:#f92672">&lt;&lt;</span> v.as_integer() <span style="color:#f92672">&lt;&lt;</span> std<span style="color:#f92672">::</span>endl; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>指定された値と異なる型が格納されていた場合、 <a href="https://toruniina.github.io/toml11/ja/docs/reference/value/#tomltype_error"><code>toml::type_error</code></a> が送出されます。</p> <p>その <code>what()</code> は以下のようなメッセージを含みます。</p> <pre tabindex="0"><code>[error] toml::value::as_string(): bad_cast to string --&gt; input.toml | 1 | a = 123_456 | ^^^^^^^-- the actual type is integer </code></pre><h3 id="tomlvalue_t"> <code>toml::value_t</code> <a class="anchor" href="#tomlvalue_t">#</a> </h3> <p>型情報は <a href="https://toruniina.github.io/toml11/ja/docs/reference/value_t/"><code>enum class toml::value_t</code></a> で識別できます。</p>error messagehttps://toruniina.github.io/toml11/ja/docs/features/error_message/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/error_message/<h1 id="エラーメッセージを出力する"> エラーメッセージを出力する <a class="anchor" href="#%e3%82%a8%e3%83%a9%e3%83%bc%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b">#</a> </h1> <p>toml11は <code>toml::parse</code> や <code>toml::get&lt;T&gt;/find&lt;T&gt;</code>, <code>as_integer()</code> などから ファイル内の位置情報を含んだエラーメッセージを出力します。</p> <p>例えば、パース時に整数の文法エラーを発見した場合、</p> <pre tabindex="0"><code>[error] bad integer: `_` must be surrounded by digits --&gt; internal string at line 64 in file main.cpp | 1 | a = 123__456 | ^-- invalid underscore Hint: valid : -42, 1_000, 1_2_3_4_5, 0xC0FFEE, 0b0010, 0o755 Hint: invalid: _42, 1__000, 0123 </code></pre><p>あるいは実際に格納されている型と異なる型を要求した場合</p> <pre tabindex="0"><code>[error] toml::value::as_string(): bad_cast to string --&gt; input.toml | 1 | a = 123_456 | ^^^^^^^-- the actual type is integer </code></pre><p>toml11は <code>toml::value</code> からこのようなエラーメッセージを作成する方法を提供します。</p>serializing valueshttps://toruniina.github.io/toml11/ja/docs/features/serialize/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/serialize/<h1 id="tomlファイルを出力する"> TOMLファイルを出力する <a class="anchor" href="#toml%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b">#</a> </h1> <p><code>toml::format</code> を使うと、 <code>toml::value</code> を文字列にすることができます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;cassert&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value v(toml<span style="color:#f92672">::</span>table{ </span></span><span style="display:flex;"><span> {<span style="color:#e6db74">&#34;a&#34;</span>, <span style="color:#ae81ff">42</span>}, </span></span><span style="display:flex;"><span> {<span style="color:#e6db74">&#34;b&#34;</span>, <span style="color:#e6db74">&#34;foo&#34;</span>}, </span></span><span style="display:flex;"><span> }); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string s <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>format(v); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value u <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse_str(s); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> assert(u.at(<span style="color:#e6db74">&#34;a&#34;</span>).as_integer() <span style="color:#f92672">==</span> <span style="color:#ae81ff">42</span>); </span></span><span style="display:flex;"><span> assert(u.at(<span style="color:#e6db74">&#34;b&#34;</span>).as_string() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;foo&#34;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><code>table_type</code> を格納している <code>toml::value</code> が渡されると、それがファイルのルートテーブルとして解釈されます。</p> <p>もし <code>table_type</code> 以外を格納している <code>toml::value</code> が渡されると、その値だけがフォーマットされます。</p> <p>一部のフォーマット指定では、キーが渡されていないとフォーマットできないことがあります。 例えば、 <code>toml::array_format::array_of_tables</code> は <code>[[array.of.tables]]</code> の形でフォーマットするので、 キーへのアクセスを要求します。</p> <p>キーを要求するフォーマット指定の値がキーなしで渡された場合、 <code>toml::serialization_error</code> が送出されます。</p> <p>他にも、フォーマット指定と矛盾する値が含まれる場合には、 <code>toml::serialization_error</code> が送出されます。 例えば、 <code>integer_format::hex</code> が指定された整数が負の値を持っている場合や、 <code>string_format::literal</code> が指定された文字列が改行を含んでいる場合などです。</p> <p>フォーマットの指定方法は後述します。</p> <h2 id="キーを渡して出力する"> キーを渡して出力する <a class="anchor" href="#%e3%82%ad%e3%83%bc%e3%82%92%e6%b8%a1%e3%81%97%e3%81%a6%e5%87%ba%e5%8a%9b%e3%81%99%e3%82%8b">#</a> </h2> <p><code>toml::format</code> には <code>std::string</code> としてキーを渡すことが可能です。</p>configuring typeshttps://toruniina.github.io/toml11/ja/docs/features/configure_types/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/configure_types/<h1 id="型をカスタマイズする"> 型をカスタマイズする <a class="anchor" href="#%e5%9e%8b%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b">#</a> </h1> <p><code>toml::value</code> は <code>integer_type</code> として <code>std::int64_t</code> を、 <code>table_type</code> として <code>std::unordered_map&lt;key_type, value_type&gt;</code> を使用します。</p> <p>しかし、場合によっては <code>boost::multiprecision::int128_t</code> や、 <code>std::map</code> を使用したい場合もあります。</p> <p>そのため、 <code>toml::value</code> は <code>template</code> 引数を取って格納する型を変えられるように実装されています。</p> <p><code>std::string</code> が実際には <code>std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt;&gt;</code> の エイリアスであるように、 <code>toml::value</code> は実際には <code>toml::basic_value&lt;toml::type_config&gt;</code> のエイリアスです。</p> <p>ここでは、 <code>toml::type_config</code> が持つ型と、異なる <code>config</code> 型を定義する方法を説明します。</p> <h2 id="type_config"> <code>type_config</code> <a class="anchor" href="#type_config">#</a> </h2> <p><code>type_config</code> は、以下のメンバ型と<code>static</code>メンバ関数を持つクラスです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">type_config</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> comment_type <span style="color:#f92672">=</span> preserve_comments; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> boolean_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">bool</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> integer_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">int64_t</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> floating_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">double</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> string_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>string; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> array_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>T<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> K, <span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> table_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>unordered_map<span style="color:#f92672">&lt;</span>K, T<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> result<span style="color:#f92672">&lt;</span>integer_type, error_info<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> parse_int(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> str, <span style="color:#66d9ef">const</span> source_location src, <span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> base); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> result<span style="color:#f92672">&lt;</span>floating_type, error_info<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> parse_float(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> str, <span style="color:#66d9ef">const</span> source_location src, <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">bool</span> is_hex); </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><code>toml::basic_value&lt;TypeConfig&gt;</code> は、格納する <code>boolean_type</code> を <code>TypeConfig::boolean_type</code>、 格納する <code>integer_type</code> を <code>TypeConfig::integer_type</code> 、のようにして定義しています。</p>toml literalhttps://toruniina.github.io/toml11/ja/docs/features/literal/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/literal/<h1 id="_tomlリテラル"> <code>_toml</code>リテラル <a class="anchor" href="#_toml%e3%83%aa%e3%83%86%e3%83%a9%e3%83%ab">#</a> </h1> <p><code>&quot;&quot;_toml</code>リテラルによって、TOMLファイルをその場でフォーマットできます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> <span style="color:#66d9ef">namespace</span> toml<span style="color:#f92672">::</span>literals<span style="color:#f92672">::</span>toml_literals; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;a = 42&#34;</span>_toml; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;a&#34;</span>).as_integer() <span style="color:#f92672">==</span> <span style="color:#ae81ff">42</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>改行を含む場合、生文字列リテラルが便利です。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> <span style="color:#66d9ef">namespace</span> toml<span style="color:#f92672">::</span>literals<span style="color:#f92672">::</span>toml_literals; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v <span style="color:#f92672">=</span> R<span style="color:#e6db74">&#34;(</span> </span></span><span style="display:flex;"><span> a <span style="color:#f92672">=</span> <span style="color:#ae81ff">42</span> </span></span><span style="display:flex;"><span> b <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;foo&#34;</span> </span></span><span style="display:flex;"><span> )<span style="color:#e6db74">&#34;_toml;</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;a&#34;</span>).as_integer() <span style="color:#f92672">==</span> <span style="color:#ae81ff">42</span>); </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;b&#34;</span>).as_string() <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;foo&#34;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>値が単体で書かれていた場合、その値が返されます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> <span style="color:#66d9ef">namespace</span> toml<span style="color:#f92672">::</span>literals<span style="color:#f92672">::</span>toml_literals; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> a <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;42&#34;</span>_toml; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> b <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;12:34:56&#34;</span>_toml; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;a&#34;</span>).as_integer() <span style="color:#f92672">==</span> <span style="color:#ae81ff">42</span>); </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;b&#34;</span>).as_local_time().hour <span style="color:#f92672">==</span> <span style="color:#ae81ff">12</span>); </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;b&#34;</span>).as_local_time().minute <span style="color:#f92672">==</span> <span style="color:#ae81ff">34</span>); </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;b&#34;</span>).as_local_time().second <span style="color:#f92672">==</span> <span style="color:#ae81ff">56</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>TOMLは数値のみからなるキーを許可しています。 よって、<code>[1]</code>はテーブル名として合法です。</p>toml spechttps://toruniina.github.io/toml11/ja/docs/features/toml_spec/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/toml_spec/<h1 id="toml言語バージョン"> TOML言語バージョン <a class="anchor" href="#toml%e8%a8%80%e8%aa%9e%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3">#</a> </h1> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/spec/#tomlspec"><code>toml::spec</code></a> によって、 <code>toml::parse</code> や <code>toml::format</code> で使用するTOML言語のバージョンや、個別の機能フラグを指定することができます。</p> <h2 id="tomlのバージョンを指定する"> TOMLのバージョンを指定する <a class="anchor" href="#toml%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%82%92%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b">#</a> </h2> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/spec/#tomlspec"><code>toml::spec</code></a> は <a href="https://toruniina.github.io/toml11/ja/docs/reference/spec/#tomlsemantic_version"><code>toml::semantic_version</code></a> から構築できます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>spec spec(toml<span style="color:#f92672">::</span>semantic_version(<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">0</span>)); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>ですがこれは長いので、<code>toml::spec::v()</code>関数が用意されています。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>spec spec <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>spec<span style="color:#f92672">::</span>v(<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">0</span>); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>特に指定しない場合、デフォルトの値で構築する <code>toml::spec::default_version()</code> が使用されます。</p> <p>デフォルトの値はtoml11のバージョンによって変わりますが、その時点でリリースされているTOML言語の最新バージョンに追従します。</p> <p>v4.4.0現在、TOML v1.1.0はまだリリースされていないため、デフォルトのTOMLバージョンはv1.0.0です。</p> <blockquote class="book-hint warning"> <p>TOML v1.1.0の一部の機能にはかなり長い議論が続いており、まだ差し戻される可能性があります。</p> <p>実際に差し戻された場合、toml11はマイナーバージョンアップでそれらの機能を削除、もしくは対応するそれ以降のバージョンに移動します。</p> <p>そのような意味で、将来のバージョンに関する機能は全て不安定なものと考えてください。</p> </blockquote> <h3 id="バージョン指定でパースする"> バージョン指定でパースする <a class="anchor" href="#%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e6%8c%87%e5%ae%9a%e3%81%a7%e3%83%91%e3%83%bc%e3%82%b9%e3%81%99%e3%82%8b">#</a> </h3> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/parser/"><code>toml::parse</code></a> のオーバーロードは、ファイル名に続いて<code>toml::spec</code>を受け取ります。</p> <p>これによって、使用するTOMLバージョンを変更できます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>value input <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse(<span style="color:#e6db74">&#34;input.toml&#34;</span>, toml<span style="color:#f92672">::</span>spec<span style="color:#f92672">::</span>v(<span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">1</span>, <span style="color:#ae81ff">0</span>)); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h3 id="バージョン指定でシリアライズする"> バージョン指定でシリアライズする <a class="anchor" href="#%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e6%8c%87%e5%ae%9a%e3%81%a7%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b">#</a> </h3> <p><a href="https://toruniina.github.io/toml11/ja/docs/reference/serializer/"><code>toml::format</code></a> のオーバーロードは、 <code>toml::value</code> に続いて <code>toml::spec</code> を受け取ります。</p>extensionhttps://toruniina.github.io/toml11/ja/docs/features/extension/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/features/extension/<h1 id="toml言語拡張"> TOML言語拡張 <a class="anchor" href="#toml%e8%a8%80%e8%aa%9e%e6%8b%a1%e5%bc%b5">#</a> </h1> <p>TOML言語は現在 v1.0.0 が最新版ですが、その後もいくつかの新機能が議論の末マージされ、 v1.1.0に向けて議論が続いています。</p> <p>そこで議論された機能の中には、有用なケースが少ないと考えられたものや、 提案された際の方向性では導入が難しいもの、導入がされなかったものも多くあります。</p> <p>toml11では、そのような機能のなかからいくつかを選んで、実験的に実装を行っています。 これらはtoml11ではサポートされていますが、他のパーサではサポートされておらず、また サポートされる予定もないことに注意してください。</p> <p>また、これらの機能はデフォルトで使用されない設定になっており、 使用するためには機能フラグをそれぞれ <code>true</code> にしなければなりません。 非標準の機能なので、あえて明示的に書かなければ使えないように設計しています。</p> <p>いくつかの機能は今後TOML言語自体に新機能としてマージされる可能性があります。 もし以下の拡張機能を完全に置き換えられる機能が導入された場合、拡張機能は 本来の機能の実装後にマイナーバージョンアップで削除される可能性があります。</p> <h2 id="null"> <code>null</code> <a class="anchor" href="#null">#</a> </h2> <p>TOMLファイル内で値として<code>null</code>を使えるようになります。</p> <pre tabindex="0"><code>a = null b = [ 1, 2, 3, null, 5] </code></pre><p>これを使用するには、 <code>toml::spec</code> の <code>ext_null_value</code> を <code>true</code> にします。</p> <p>パースすると、デフォルト構築した場合と同様の <code>toml::value_t::empty</code> となります。 ただし、ファイル内の位置情報は設定されます。</p> <p><code>null</code> は値の文脈でのみパースされるので、キーに <code>null</code> を使用した際はこれまで通り <code>&quot;null&quot;</code> という文字列のキーとして解釈されます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>spec spec; </span></span><span style="display:flex;"><span> spec.ext_null_value <span style="color:#f92672">=</span> true; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse_str(<span style="color:#e6db74">&#34;a = null&#34;</span>, spec); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;a&#34;</span>).is_empty()); </span></span><span style="display:flex;"><span> assert(v.at(<span style="color:#e6db74">&#34;a&#34;</span>).is(toml<span style="color:#f92672">::</span>value_t<span style="color:#f92672">::</span>empty)); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h2 id="浮動小数点数の16進数フォーマット"> 浮動小数点数の16進数フォーマット <a class="anchor" href="#%e6%b5%ae%e5%8b%95%e5%b0%8f%e6%95%b0%e7%82%b9%e6%95%b0%e3%81%ae16%e9%80%b2%e6%95%b0%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88">#</a> </h2> <p>TOMLファイル内で浮動小数点数に16進数フォーマットを使用できるようになります。</p>color.hpphttps://toruniina.github.io/toml11/ja/docs/reference/color/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/color/<h1 id="colorhpp"> color.hpp <a class="anchor" href="#colorhpp">#</a> </h1> <p><code>color.hpp</code>では、エラーメッセージの色付けに関する関数が定義されます。</p> <p>色はANSIエスケープシーケンスによって指定されます。 ANSIエスケープシーケンスをサポートしていないターミナルやその他の出力先では、読みにくくなる可能性があります。</p> <h2 id="マクロ"> マクロ <a class="anchor" href="#%e3%83%9e%e3%82%af%e3%83%ad">#</a> </h2> <h3 id="toml11_colorize_error_message"> <code>TOML11_COLORIZE_ERROR_MESSAGE</code> <a class="anchor" href="#toml11_colorize_error_message">#</a> </h3> <p>コンパイル時にこのマクロが定義されていた場合(<code>-DTOML11_COLORIZE_ERROR_MESASGE</code>)、 デフォルトでエラーメッセージに色が付きます。</p> <p>定義されていなかった場合、デフォルトでは色は付きません。以下の <code>toml::color::enable()</code> を 使用して指定する必要があります。</p> <h3 id="toml11_use_thread_local_colorization"> <code>TOML11_USE_THREAD_LOCAL_COLORIZATION</code> <a class="anchor" href="#toml11_use_thread_local_colorization">#</a> </h3> <p>コンパイル時にこのマクロが定義されていた場合(<code>-DTOML11_COLORIZE_ERROR_MESASGE</code>)、 <code>toml::color::enable</code>の設定が<code>thread_local</code>になります。 この場合、<code>toml::color::enable()</code>や<code>toml::color::disable()</code>は、それを呼び出したスレッドでの設定しか変更しません。 つまり、新しいスレッドを起動した際にデフォルトと異なる設定にしたい場合は、再度設定が必要になります。 その代わり、<code>toml::color::enable()</code>や<code>toml::color::disable()</code>はスレッドセーフになります。</p> <p>デフォルトでは設定はグローバルです。 グローバルの場合、一つのスレッドが<code>toml::color::enable()</code>を実行した場合、すべてのスレッドで色が付きます。 ただし、あるスレッドが<code>enable()</code>または<code>disable()</code>を実行している間に別のスレッドが<code>enable()</code>、<code>disable()</code>、<code>should_color()</code>を実行した場合、その結果は未定義です。</p> <h2 id="関数"> 関数 <a class="anchor" href="#%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="enable"> <code>enable()</code> <a class="anchor" href="#enable">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml { </span></span><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> color { </span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">enable</span>(); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// color </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><p>ANSIエスケープシーケンスによる色付けを行うよう設定します。</p> <h4 id="例"> 例 <a class="anchor" href="#%e4%be%8b">#</a> </h4> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>color<span style="color:#f92672">::</span>enable(); <span style="color:#75715e">// この後の全てのエラーがカラーになります。 </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> input <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse(<span style="color:#e6db74">&#34;input.toml&#34;</span>); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h3 id="disable"> <code>disable()</code> <a class="anchor" href="#disable">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml { </span></span><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> color { </span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">disable</span>(); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// color </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><p>ANSIエスケープシーケンスによる色付けを行わないよう設定します。</p>comments.hpphttps://toruniina.github.io/toml11/ja/docs/reference/comments/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/comments/<h1 id="commentshpp"> comments.hpp <a class="anchor" href="#commentshpp">#</a> </h1> <p><code>color.hpp</code>では、コメントを保持するクラスが提供されます。</p> <h1 id="tomlpreserve_comments"> <code>toml::preserve_comments</code> <a class="anchor" href="#tomlpreserve_comments">#</a> </h1> <p><code>preserve_comments</code>は、コメントを保持するコンテナです。</p> <p><code>std::vector&lt;std::string&gt;</code>が持つメンバ関数を全て持っています。</p> <p>コメントは<code>std::string</code>として保持されます。 先頭が<code>#</code>でない場合、出力時に<code>#</code>が補われます。コンテナに要素として追加する段階では補われません。 スペースは補われないため、<code>#</code>の直後にスペースを入れたい場合、コメントをスペースから始めるか、<code>#</code>を含めたコメントを渡す必要があります。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">preserve_comments</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">==</span>(<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">!=</span>(<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;</span> (<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;=</span>(<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;</span> (<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;=</span>(<span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">swap</span>(preserve_comments<span style="color:#f92672">&amp;</span>, preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">swap</span>(preserve_comments<span style="color:#f92672">&amp;</span>, std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">void</span> <span style="color:#a6e22e">swap</span>(std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;&amp;</span>, preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> preserve_comments<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">//toml </span></span></span></code></pre></div><h2 id="メンバ型"> メンバ型 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e5%9e%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> container_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> size_type <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>size_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> difference_type <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>difference_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> value_type <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>value_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> reference <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>reference; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_reference <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>const_reference; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> pointer <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>pointer; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_pointer <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>const_pointer; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> iterator <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>iterator; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_iterator <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>const_iterator; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> reverse_iterator <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>reverse_iterator; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_reverse_iterator <span style="color:#f92672">=</span> container_type<span style="color:#f92672">::</span>const_reverse_iterator; </span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="デフォルトコンストラクタ"> デフォルトコンストラクタ <a class="anchor" href="#%e3%83%87%e3%83%95%e3%82%a9%e3%83%ab%e3%83%88%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>preserve_comments() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span></code></pre></div><p>空の<code>preserve_comments</code>を構築します。</p>conversion.hpphttps://toruniina.github.io/toml11/ja/docs/reference/conversion/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/conversion/<h1 id="conversionhpp"> conversion.hpp <a class="anchor" href="#conversionhpp">#</a> </h1> <p><code>toml::get</code>や<code>toml::find</code>でユーザー定義型をサポートするための変換関数を自動定義するマクロを提供します。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>TOML11_DEFINE_CONVERSION_NON_INTRUSIVE(NAME, ...) </span></span></code></pre></div><h2 id="例"> 例 <a class="anchor" href="#%e4%be%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> foo </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">Foo</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string s; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">double</span> d; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">int</span> i; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// foo </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span>TOML11_DEFINE_CONVERSION_NON_INTRUSIVE(foo<span style="color:#f92672">::</span>Foo, s, d, i) </span></span></code></pre></div><h1 id="関連項目"> 関連項目 <a class="anchor" href="#%e9%96%a2%e9%80%a3%e9%a0%85%e7%9b%ae">#</a> </h1> <ul> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/from/">from.hpp</a></li> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/into/">into.hpp</a></li> </ul>datetime.hpphttps://toruniina.github.io/toml11/ja/docs/reference/datetime/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/datetime/<h1 id="datetimehpp"> datetime.hpp <a class="anchor" href="#datetimehpp">#</a> </h1> <p>TOMLの<code>datetime</code>で使用される、日時情報を保存するクラスを定義します。</p> <h1 id="enum-class-month_t"> <code>enum class month_t</code> <a class="anchor" href="#enum-class-month_t">#</a> </h1> <p>月を指定する<code>enum class</code>です。</p> <p><code>std::tm</code>との関係で、<code>local_date</code>は1月を<code>0</code>としています。 混乱を避けるため、月の名前で指定できるよう<code>month_t</code>が用意されています。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">enum</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">month_t</span> <span style="color:#f92672">:</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> Jan <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>, </span></span><span style="display:flex;"><span> Feb <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>, </span></span><span style="display:flex;"><span> Mar <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>, </span></span><span style="display:flex;"><span> Apr <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>, </span></span><span style="display:flex;"><span> May <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>, </span></span><span style="display:flex;"><span> Jun <span style="color:#f92672">=</span> <span style="color:#ae81ff">5</span>, </span></span><span style="display:flex;"><span> Jul <span style="color:#f92672">=</span> <span style="color:#ae81ff">6</span>, </span></span><span style="display:flex;"><span> Aug <span style="color:#f92672">=</span> <span style="color:#ae81ff">7</span>, </span></span><span style="display:flex;"><span> Sep <span style="color:#f92672">=</span> <span style="color:#ae81ff">8</span>, </span></span><span style="display:flex;"><span> Oct <span style="color:#f92672">=</span> <span style="color:#ae81ff">9</span>, </span></span><span style="display:flex;"><span> Nov <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span>, </span></span><span style="display:flex;"><span> Dec <span style="color:#f92672">=</span> <span style="color:#ae81ff">11</span> </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h1 id="local_date"> <code>local_date</code> <a class="anchor" href="#local_date">#</a> </h1> <p>日付を保持する構造体です。</p> <p><code>year</code>は西暦を、<code>month</code>は<code>std::tm</code>との対応のため1月を<code>0</code>として、<code>day</code>は日付を保持します。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">local_date</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">int16_t</span> year; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> month; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> day; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> local_date() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> <span style="color:#f92672">~</span>local_date() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> local_date(local_date <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> local_date(local_date<span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> local_date<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(local_date <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> local_date<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(local_date<span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> local_date(<span style="color:#66d9ef">int</span> y, month_t m, <span style="color:#66d9ef">int</span> d); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> <span style="color:#a6e22e">local_date</span>(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>tm<span style="color:#f92672">&amp;</span> t); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> <span style="color:#a6e22e">local_date</span>(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>chrono<span style="color:#f92672">::</span>system_clock<span style="color:#f92672">::</span>time_point<span style="color:#f92672">&amp;</span> tp); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> <span style="color:#a6e22e">local_date</span>(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>time_t t); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">operator</span> std<span style="color:#f92672">::</span>chrono<span style="color:#f92672">::</span>system_clock<span style="color:#f92672">::</span>time_point() <span style="color:#66d9ef">const</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">operator</span> std<span style="color:#f92672">::</span>time_t() <span style="color:#66d9ef">const</span>; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">==</span>(<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">!=</span>(<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;</span> (<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;=</span>(<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;</span> (<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;=</span>(<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, <span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span> date); </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string to_string(<span style="color:#66d9ef">const</span> local_date<span style="color:#f92672">&amp;</span> date); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h2 id="メンバ変数"> メンバ変数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e5%a4%89%e6%95%b0">#</a> </h2> <h3 id="year"> <code>year</code> <a class="anchor" href="#year">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>std<span style="color:#f92672">::</span><span style="color:#66d9ef">int16_t</span> year; </span></span></code></pre></div><p>西暦です。オフセットはありません。<code>2024</code>年は<code>2024</code>です。</p>error_info.hpphttps://toruniina.github.io/toml11/ja/docs/reference/error_info/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/error_info/<h1 id="error_infohpp"> error_info.hpp <a class="anchor" href="#error_infohpp">#</a> </h1> <p><code>error_info.hpp</code>では、<code>error_info</code>と、それをフォーマットする関数が定義されます。</p> <h1 id="tomlerror_info"> <code>toml::error_info</code> <a class="anchor" href="#tomlerror_info">#</a> </h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">error_info</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> error_info(std<span style="color:#f92672">::</span>string t, source_location l, std<span style="color:#f92672">::</span>string m, std<span style="color:#f92672">::</span>string s <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;</span>); </span></span><span style="display:flex;"><span> error_info(std<span style="color:#f92672">::</span>string t, std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>pair<span style="color:#f92672">&lt;</span>source_location, std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;&gt;</span> l, std<span style="color:#f92672">::</span>string s <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> title() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#f92672">&amp;</span> title() <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>pair<span style="color:#f92672">&lt;</span>source_location, std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;&gt;</span> <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> locations() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">void</span> <span style="color:#a6e22e">add_locations</span>(source_location loc, std<span style="color:#f92672">::</span>string msg) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> suffix() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#f92672">&amp;</span> suffix() <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> ... Ts<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>error_info make_error_info( </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string title, source_location loc, std<span style="color:#f92672">::</span>string msg, Ts<span style="color:#f92672">&amp;&amp;</span> ... tail); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format_error(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> errkind, <span style="color:#66d9ef">const</span> error_info<span style="color:#f92672">&amp;</span> err); </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format_error(<span style="color:#66d9ef">const</span> error_info<span style="color:#f92672">&amp;</span> err); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> ... Ts<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format_error(std<span style="color:#f92672">::</span>string title, </span></span><span style="display:flex;"><span> source_location loc, std<span style="color:#f92672">::</span>string msg, Ts<span style="color:#f92672">&amp;&amp;</span> ... tail); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, <span style="color:#66d9ef">const</span> error_info<span style="color:#f92672">&amp;</span> e); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="コンストラクタtitle-loc-msg-suffix"> コンストラクタ(<code>title, loc, msg, suffix</code>) <a class="anchor" href="#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bftitle-loc-msg-suffix">#</a> </h3> <p>指定されたタイトル、位置情報、メッセージ、suffixから<code>error_info</code>を構築します。</p>exception.hpphttps://toruniina.github.io/toml11/ja/docs/reference/exception/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/exception/<h1 id="exceptionhpp"> exception.hpp <a class="anchor" href="#exceptionhpp">#</a> </h1> <h1 id="tomlexception"> <code>toml::exception</code> <a class="anchor" href="#tomlexception">#</a> </h1> <p>toml11で定義される例外型の基底クラスです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">exception</span> <span style="color:#f92672">:</span> <span style="color:#66d9ef">public</span> std<span style="color:#f92672">::</span>exception </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">public</span><span style="color:#f92672">:</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">virtual</span> <span style="color:#f92672">~</span>exception() <span style="color:#66d9ef">noexcept</span> <span style="color:#66d9ef">override</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">virtual</span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span><span style="color:#f92672">*</span> <span style="color:#a6e22e">what</span>() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span> <span style="color:#66d9ef">override</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;&#34;</span>;} </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="デストラクタ"> デストラクタ <a class="anchor" href="#%e3%83%87%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">virtual</span> <span style="color:#f92672">~</span>exception() <span style="color:#66d9ef">noexcept</span> <span style="color:#66d9ef">override</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span></code></pre></div><p>派生する際に上書きします。</p> <h3 id="what"> <code>what</code> <a class="anchor" href="#what">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">virtual</span> <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span><span style="color:#f92672">*</span> <span style="color:#a6e22e">what</span>() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span> <span style="color:#66d9ef">override</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;&#34;</span>;} </span></span></code></pre></div><p>エラーメッセージを返します。派生する際に上書きします。</p>find.hpphttps://toruniina.github.io/toml11/ja/docs/reference/find/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/find/<h1 id="findhpp"> find.hpp <a class="anchor" href="#findhpp">#</a> </h1> <p><code>toml::value</code>から値を検索し、同時に(必要な場合)型変換を行う関数です。</p> <blockquote class="book-hint info"> <code>toml::value</code> は格納する型を変更でき、<code>toml::find</code>はそれらに対応しているので、 厳密には全て <code>toml::basic_value&lt;TC&gt;</code> が使われています。ただしこれでは冗長なので、 関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では <code>toml::value</code> と書きます。 説明文では、テンプレートパラメータ<code>TC</code>を変更して型が変更されていれば <code>toml::value::integer_type</code> などの型は追従して変更されると解釈してください。 </blockquote> <h1 id="tomlfind"> <code>toml::find</code> <a class="anchor" href="#tomlfind">#</a> </h1> <h2 id="概要"> 概要 <a class="anchor" href="#%e6%a6%82%e8%a6%81">#</a> </h2> <p><code>toml::find</code>には、取り出したい型をテンプレート引数で、検索したい値のキーを引数で与えます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T, <span style="color:#66d9ef">typename</span> TC, <span style="color:#66d9ef">typename</span> ... Keys<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>T find(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v, Keys ... keys); </span></span></code></pre></div><p>サポートされている <code>T</code> の種類と変換の挙動に関しては、 <code>toml::get</code> と同様です。</p> <p><code>T</code> が指定されなかった場合、 <code>toml::value</code> が返されます。</p> <p>キーは、 <code>toml::value::key_type</code> または <code>std::size_t</code> です。 複数個のキーが与えられた場合は、サブテーブルや配列に対して再帰的に検索が行われます。 <code>toml::value::key_type</code> が与えられた場合は <code>toml::table</code> として、 <code>std::size_t</code> が与えられた場合は <code>toml::array</code> として解釈されます。</p> <h3 id="再帰的な検索に関しての注意"> 再帰的な検索に関しての注意 <a class="anchor" href="#%e5%86%8d%e5%b8%b0%e7%9a%84%e3%81%aa%e6%a4%9c%e7%b4%a2%e3%81%ab%e9%96%a2%e3%81%97%e3%81%a6%e3%81%ae%e6%b3%a8%e6%84%8f">#</a> </h3> <p>TOMLには通常の bare key の他に、 <code>&quot;</code> や <code>'</code> で囲まれた quoted key というものがあります。 quoted key を使うと、 <code>&quot;foo.bar&quot; = &quot;baz&quot;</code> というようなキーを書くことができ、この場合はサブテーブルは構築されず、キーは <code>foo.bar</code>となります。 このようなパターンに対応するため、toml11ではキーの中に<code>.</code>が含まれていても分割は行わず、そのままの文字列で検索を行います。</p>format.hpphttps://toruniina.github.io/toml11/ja/docs/reference/format/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/format/<h1 id="formathpp"> format.hpp <a class="anchor" href="#formathpp">#</a> </h1> <p><code>toml::value</code>のフォーマット情報を持つ構造体と列挙型を定義します。</p> <h1 id="indent_char"> <code>indent_char</code> <a class="anchor" href="#indent_char">#</a> </h1> <p>インデント情報を表す列挙体です。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">enum</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">indent_char</span> <span style="color:#f92672">:</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> space, <span style="color:#75715e">// use space </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> tab, <span style="color:#75715e">// use tab </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> none <span style="color:#75715e">// no indent </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>}; </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, <span style="color:#66d9ef">const</span> indent_char<span style="color:#f92672">&amp;</span> c); </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string to_string(<span style="color:#66d9ef">const</span> indent_char); </span></span></code></pre></div><p><code>none</code>を選んだ場合、super tableでの値によらず、インデントは使用されません。</p> <p>シリアライズ対象の値のなかに<code>space</code>と<code>tab</code>を指定する値が同時に存在していた場合、その動作は未規定で、指定していない方の文字が出現する可能性があります。</p> <h1 id="boolean_format_info"> <code>boolean_format_info</code> <a class="anchor" href="#boolean_format_info">#</a> </h1> <p><code>boolean</code>のフォーマット情報です。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">boolean_format_info</span> {}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">==</span>(<span style="color:#66d9ef">const</span> boolean_format_info<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> boolean_format_info<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">!=</span>(<span style="color:#66d9ef">const</span> boolean_format_info<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> boolean_format_info<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span></code></pre></div><p><code>boolean</code>のフォーマット方法は一通りしかないため、設定できる値を持ちません。</p> <h1 id="integer_format"> <code>integer_format</code> <a class="anchor" href="#integer_format">#</a> </h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">enum</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">integer_format</span> <span style="color:#f92672">:</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> dec <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>, </span></span><span style="display:flex;"><span> bin <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>, </span></span><span style="display:flex;"><span> oct <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>, </span></span><span style="display:flex;"><span> hex <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>, </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, <span style="color:#66d9ef">const</span> integer_format f); </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string to_string(<span style="color:#66d9ef">const</span> integer_format); </span></span></code></pre></div><p><code>integer</code>の基数を指定します。</p>from.hpphttps://toruniina.github.io/toml11/ja/docs/reference/from/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/from/<h1 id="fromhpp"> from.hpp <a class="anchor" href="#fromhpp">#</a> </h1> <p><code>toml::get</code>や<code>toml::find</code>で使用する、<code>toml::value</code>からの変換を定義する構造体です。</p> <p>メンバ関数に<code>from_toml</code>を追加することによっても同じ機能を追加できますが、メンバ関数を追加できないクラスに対しては<code>from&lt;T&gt;</code>を使用してください。</p> <p>このファイルでは特定の実装は提供しません。使用する際に、この構造体を特殊化してください。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">from</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="例"> 例 <a class="anchor" href="#%e4%be%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> extlib </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">foo</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">int</span> a; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string b; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// extlib </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml11/from.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">from</span><span style="color:#f92672">&lt;</span>extlib<span style="color:#f92672">::</span>foo<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> extlib<span style="color:#f92672">::</span>foo from_toml(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v) </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> extlib<span style="color:#f92672">::</span>foo{toml<span style="color:#f92672">::</span>find<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">int</span><span style="color:#f92672">&gt;</span>(v, <span style="color:#e6db74">&#34;a&#34;</span>), toml<span style="color:#f92672">::</span>find<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;</span>(v, <span style="color:#e6db74">&#34;b&#34;</span>)}; </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h1 id="関連項目"> 関連項目 <a class="anchor" href="#%e9%96%a2%e9%80%a3%e9%a0%85%e7%9b%ae">#</a> </h1> <ul> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/conversion/">conversion.hpp</a></li> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/into/">into.hpp</a></li> </ul>get.hpphttps://toruniina.github.io/toml11/ja/docs/reference/get/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/get/<h1 id="gethpp"> get.hpp <a class="anchor" href="#gethpp">#</a> </h1> <p><code>toml::value</code>から値を取り出し、同時に(必要な場合)型変換を行う関数です。</p> <blockquote class="book-hint info"> <code>toml::value</code> は格納する型を変更でき、<code>toml::get</code>はそれらに対応しているので、 厳密には全て <code>toml::basic_value&lt;TC&gt;</code> が使われています。ただしこれでは冗長なので、 関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では <code>toml::value</code> と書きます。 説明文では、テンプレートパラメータ<code>TC</code>を変更して型が変更されていれば <code>toml::value::integer_type</code> などの型は追従して変更されると解釈してください。 </blockquote> <h1 id="tomlgett"> <code>toml::get&lt;T&gt;</code> <a class="anchor" href="#tomlgett">#</a> </h1> <h2 id="概要"> 概要 <a class="anchor" href="#%e6%a6%82%e8%a6%81">#</a> </h2> <p>基本的に、<code>toml::get</code>は以下のような関数として振る舞います。 <code>T</code>は<code>toml::get&lt;int&gt;(v)</code>のようにして与えます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T, <span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>T get(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v); </span></span></code></pre></div><p>ただし、<code>T</code>がどのような型であるかによって、<code>toml::get</code>は異なる挙動をします。</p> <p><code>T</code>の型の種類は、</p> <ol> <li>変換が必要ない型</li> <li>変換する必要がある型</li> </ol> <p>に分けられます。</p> <p>細かい条件と、特別にサポートしている具体的な型については後述します。</p> <h3 id="変換が必要ない型"> 変換が必要ない型 <a class="anchor" href="#%e5%a4%89%e6%8f%9b%e3%81%8c%e5%bf%85%e8%a6%81%e3%81%aa%e3%81%84%e5%9e%8b">#</a> </h3> <p>変換が必要ないのは、渡された <code>toml::value</code> が格納している型です。 例えば、 <code>toml::value::integer_type</code> は <code>std::int64_t</code> のエイリアスなので、 <code>toml::get&lt;std::int64_t&gt;(v)</code> は変換を必要としません。 この場合、 <code>toml:get</code> は <code>integer</code> の値を <code>toml::value</code> から取り出し、その参照を返します。</p> <p>渡された<code>toml::value</code>が可変参照(<code>&amp;</code>)である場合、返す値も可変参照(<code>&amp;</code>)です。 不変参照(<code>const&amp;</code>)の場合、返す値も不変参照(<code>const&amp;</code>)となります。 可変参照を返した場合、その参照を通して<code>toml::value</code>に格納されている値に上書きできます。</p> <h3 id="変換が必要な型"> 変換が必要な型 <a class="anchor" href="#%e5%a4%89%e6%8f%9b%e3%81%8c%e5%bf%85%e8%a6%81%e3%81%aa%e5%9e%8b">#</a> </h3> <p>上記の型以外については変換が必要です。 例えば、<code>toml::value::integer_type</code>は<code>std::int64_t</code>のエイリアスなので、<code>toml::get&lt;std::size_t&gt;(toml::value&amp;)</code>は変換が必要です。 この場合、<code>toml:get</code>は<code>integer</code>の値を<code>toml::value</code>から取り出し、それをキャストして返します。</p> <p>toml11は簡単なキャストだけでなく、 <code>toml::array</code>からや<code>std::tuple&lt;int, double, std::string&gt;</code>や<code>std::array&lt;double, 4&gt;</code>、 <code>toml::table</code>から<code>std::map&lt;std::string, int&gt;</code>などの複雑な型変換をサポートします。 具体的には、続くセクションを参照してください。</p>into.hpphttps://toruniina.github.io/toml11/ja/docs/reference/into/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/into/<h1 id="intohpp"> into.hpp <a class="anchor" href="#intohpp">#</a> </h1> <p><code>toml::value</code>のコンストラクタで使用する、ユーザー定義型からの変換を定義する構造体です。</p> <p>メンバ関数に<code>into_toml</code>を追加することによっても同じ機能を追加できますが、メンバ関数を追加できないクラスに対しては<code>into&lt;T&gt;</code>を使用してください。</p> <p>このファイルでは特定の実装は提供しません。使用する際に、この構造体を特殊化してください。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">into</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="例"> 例 <a class="anchor" href="#%e4%be%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> extlib </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">foo</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">int</span> a; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string b; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// extlib </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml11/into.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">into</span><span style="color:#f92672">&lt;</span>extlib<span style="color:#f92672">::</span>foo<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> toml<span style="color:#f92672">::</span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;</span> into_toml(<span style="color:#66d9ef">const</span> extlib<span style="color:#f92672">::</span>foo<span style="color:#f92672">&amp;</span> f) </span></span><span style="display:flex;"><span> { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> value_type <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> table_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> value_type<span style="color:#f92672">::</span>table_type; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">value_type</span>(table_type{{<span style="color:#e6db74">&#34;a&#34;</span>, f.a}, {<span style="color:#e6db74">&#34;b&#34;</span>, f.b}}); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h1 id="関連項目"> 関連項目 <a class="anchor" href="#%e9%96%a2%e9%80%a3%e9%a0%85%e7%9b%ae">#</a> </h1> <ul> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/conversion/">conversion.hpp</a></li> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/from/">from.hpp</a></li> </ul>literal.hpphttps://toruniina.github.io/toml11/ja/docs/reference/literal/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/literal/<h1 id="literalhpp"> literal.hpp <a class="anchor" href="#literalhpp">#</a> </h1> <p><code>literal.hpp</code>では、<code>_toml</code>リテラルが定義されます。</p> <p><code>_toml</code>リテラルは、文字列リテラルをパースして<code>toml::value</code>に変換します。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">namespace</span> literals </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">namespace</span> toml_literals </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span>toml<span style="color:#f92672">::</span>value <span style="color:#66d9ef">operator</span><span style="color:#e6db74">&#34;&#34;</span> _toml(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span><span style="color:#f92672">*</span> str, std<span style="color:#f92672">::</span>size_t len); </span></span><span style="display:flex;"><span>toml<span style="color:#f92672">::</span>value <span style="color:#66d9ef">operator</span><span style="color:#e6db74">&#34;&#34;</span> _toml(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char8_t</span><span style="color:#f92672">*</span> str, std<span style="color:#f92672">::</span>size_t len); <span style="color:#75715e">// C++20以降 </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#75715e">// toml_literals </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#75715e">// literals </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="自由関数"> 自由関数 <a class="anchor" href="#%e8%87%aa%e7%94%b1%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="operator-_tomlchar"> <code>operator&quot;&quot; _toml(char)</code> <a class="anchor" href="#operator-_tomlchar">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>toml<span style="color:#f92672">::</span>value <span style="color:#66d9ef">operator</span><span style="color:#e6db74">&#34;&#34;</span> _toml(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span><span style="color:#f92672">*</span> str, std<span style="color:#f92672">::</span>size_t len); </span></span></code></pre></div><p>文字列リテラルをパースして<code>toml::value</code>に変換します。</p> <p>通常のTOMLファイルの場合、<code>toml::parse</code>と同等の処理が行われます。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v1 <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;a = &#39;foo&#39;&#34;</span>_toml; <span style="color:#75715e">// v1: {a = &#39;foo&#39;} </span></span></span></code></pre></div><p>改行を含む場合、生文字列リテラルが便利です。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v1 <span style="color:#f92672">=</span> R<span style="color:#e6db74">&#34;(</span> </span></span><span style="display:flex;"><span> a <span style="color:#f92672">=</span> <span style="color:#ae81ff">42</span> </span></span><span style="display:flex;"><span> b <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;foo&#34;</span> </span></span><span style="display:flex;"><span>)<span style="color:#e6db74">&#34;_toml;</span> </span></span></code></pre></div><p>値が単体で書かれていた場合、その値になります。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> v2 <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#39;foo&#39;&#34;</span>_toml; <span style="color:#75715e">// v2: &#39;foo&#39; </span></span></span></code></pre></div><p>TOMLは数値のみからなるキーを許可しています。 <code>[1]</code>のように、テーブル定義と配列の区別がつかない場合、テーブル定義が優先されます。</p> <p>配列として解釈させるには、trailing commaを使用してください。</p>ordered_map.hpphttps://toruniina.github.io/toml11/ja/docs/reference/ordered_map/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/ordered_map/<h1 id="ordered_maphpp"> ordered_map.hpp <a class="anchor" href="#ordered_maphpp">#</a> </h1> <p>ファイル中の値の順番を維持するために使用する<code>toml::ordered_map</code>を定義します。</p> <h1 id="class-ordered_map"> <code>class ordered_map</code> <a class="anchor" href="#class-ordered_map">#</a> </h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> Key, <span style="color:#66d9ef">typename</span> Val, <span style="color:#66d9ef">typename</span> Cmp <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>equal_to<span style="color:#f92672">&lt;</span>Key<span style="color:#f92672">&gt;</span>, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">typename</span> Allocator <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>allocator<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>pair<span style="color:#f92672">&lt;</span>Key, Val<span style="color:#f92672">&gt;&gt;&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">ordered_map</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><code>ordered_map</code>は、値を追加した順序を保ったまま値を保持し、その順でイテレートできる <code>map</code> 型です。</p> <p>線形コンテナなので、検索には要素数に対して <code>O(n)</code> の時間がかかります。 検索を行う機会が少なく、値の順序を守る必要がある場合に使用してください。</p> <h2 id="非メンバ型"> 非メンバ型 <a class="anchor" href="#%e9%9d%9e%e3%83%a1%e3%83%b3%e3%83%90%e5%9e%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">ordered_type_config</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> ordered_value <span style="color:#f92672">=</span> basic_value<span style="color:#f92672">&lt;</span>ordered_type_config<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> ordered_table <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> ordered_value<span style="color:#f92672">::</span>table_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> ordered_array <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> ordered_value<span style="color:#f92672">::</span>array_type; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><code>toml::type_config</code> と <code>toml::value</code> の代わりに使用します。</p> <blockquote class="book-hint info"> <p><code>toml::parse</code> はデフォルトで <code>type_config</code> を使用するので、パースする際に</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">auto</span> input <span style="color:#f92672">=</span> toml<span style="color:#f92672">::</span>parse<span style="color:#f92672">&lt;</span>toml<span style="color:#f92672">::</span>ordered_type_config<span style="color:#f92672">&gt;</span>(<span style="color:#e6db74">&#34;input.toml&#34;</span>); </span></span></code></pre></div><p>としてください。</p> </blockquote> <h2 id="メンバ型"> メンバ型 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e5%9e%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> key_type <span style="color:#f92672">=</span> Key; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> mapped_type <span style="color:#f92672">=</span> Val; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> value_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>pair<span style="color:#f92672">&lt;</span>Key, Val<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> key_compare <span style="color:#f92672">=</span> Cmp; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> allocator_type <span style="color:#f92672">=</span> Allocator; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> container_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>value_type, Allocator<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> reference <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>reference; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> pointer <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>pointer; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_reference <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>const_reference; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_pointer <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>const_pointer; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> iterator <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>iterator; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> const_iterator <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>const_iterator; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> size_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>size_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> difference_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> container_type<span style="color:#f92672">::</span>difference_type; </span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="コンストラクタ"> コンストラクタ <a class="anchor" href="#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>ordered_map() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span></code></pre></div><p>空の <code>ordered_map</code> を構築します。</p>parser.hpphttps://toruniina.github.io/toml11/ja/docs/reference/parser/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/parser/<h1 id="parserhpp"> parser.hpp <a class="anchor" href="#parserhpp">#</a> </h1> <p>ファイルまたは文字列をパースする関数と、それが用いる例外を定義します。</p> <p><code>parse</code>は失敗した場合に例外を送出しますが、<code>try_parse</code>はエラー情報を返します。</p> <h1 id="parse"> <code>parse</code> <a class="anchor" href="#parse">#</a> </h1> <p>与えられたファイルの内容をパースし、<code>toml::basic_value</code>を返します。</p> <p>失敗した場合は<code>toml::syntax_error</code>が送出されます。</p> <p><code>basic_value</code>の持つ型情報は<code>template</code>で、TOML言語のバージョンは<code>toml::spec</code>で指定します。</p> <h3 id="parsestdstring-filename-tomlspec"> <code>parse(std::string filename, toml::spec)</code> <a class="anchor" href="#parsestdstring-filename-tomlspec">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC <span style="color:#f92672">=</span> type_config<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>parse(std<span style="color:#f92672">::</span>string fname, </span></span><span style="display:flex;"><span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>ファイル名を受け取って、その内容をパースします。</p> <p>ファイルの読み込みに失敗した場合、<code>file_io_error</code>が送出されます。</p> <p>パースに失敗した場合、<code>syntax_error</code>が送出されます。</p> <h3 id="parseconst-char-n-filename-tomlspec"> <code>parse(const char (&amp;)[N] filename, toml::spec)</code> <a class="anchor" href="#parseconst-char-n-filename-tomlspec">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC <span style="color:#f92672">=</span> type_config, std<span style="color:#f92672">::</span>size_t N<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>parse(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span> (<span style="color:#f92672">&amp;</span>fname)[N], </span></span><span style="display:flex;"><span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>文字列リテラルを受け取って、そのファイルの内容をパースします。</p> <p>ファイルの読み込みに失敗した場合、<code>file_io_error</code>が送出されます。</p> <p>パースに失敗した場合、<code>syntax_error</code>が送出されます。</p> <h3 id="parsestdfilesystempath-tomlspec"> <code>parse(std::filesystem::path, toml::spec)</code> <a class="anchor" href="#parsestdfilesystempath-tomlspec">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC <span style="color:#f92672">=</span> type_config<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>parse(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>filesystem<span style="color:#f92672">::</span>path<span style="color:#f92672">&amp;</span> fpath, </span></span><span style="display:flex;"><span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p><code>&lt;filesystem&gt;</code>が利用可能な場合のみ定義されます。</p>result.hpphttps://toruniina.github.io/toml11/ja/docs/reference/result/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/result/<h1 id="resulthpp"> result.hpp <a class="anchor" href="#resulthpp">#</a> </h1> <p><code>result.hpp</code>は、成功値か失敗値かのどちらかを持つ<code>result</code>型を定義します。</p> <p>これは、例外を投げない<code>toml::try_parse</code>の返り値として使用されます。</p> <h1 id="success"> success <a class="anchor" href="#success">#</a> </h1> <p>成功値を持つ型です。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">success</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> value_type <span style="color:#f92672">=</span> T; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> <span style="color:#a6e22e">success</span>(value_type v); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">~</span>success() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> success(<span style="color:#66d9ef">const</span> success<span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> success(success<span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> success<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(<span style="color:#66d9ef">const</span> success<span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> success<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(success<span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> U<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> success(U<span style="color:#f92672">&amp;&amp;</span> v); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> U<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> success(success<span style="color:#f92672">&lt;</span>U<span style="color:#f92672">&gt;</span> v); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> value_type<span style="color:#f92672">&amp;</span> get() <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> value_type <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> get() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>success<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> std<span style="color:#f92672">::</span>decay<span style="color:#f92672">&lt;</span>T<span style="color:#f92672">&gt;::</span>type<span style="color:#f92672">&gt;</span> ok(T<span style="color:#f92672">&amp;&amp;</span> v); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>size_t N<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>success<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;</span> ok(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span> (<span style="color:#f92672">&amp;</span>literal)[N]) </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h2 id="メンバ型"> メンバ型 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e5%9e%8b">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> value_type <span style="color:#f92672">=</span> T; </span></span></code></pre></div><p>成功値の型です。</p>serializer.hpphttps://toruniina.github.io/toml11/ja/docs/reference/serializer/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/serializer/<h1 id="serializerhpp"> serializer.hpp <a class="anchor" href="#serializerhpp">#</a> </h1> <h1 id="format"> <code>format</code> <a class="anchor" href="#format">#</a> </h1> <p>シリアライズを行います。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format(<span style="color:#66d9ef">const</span> <span style="color:#66d9ef">typename</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;::</span>key_type<span style="color:#f92672">&amp;</span> k, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;::</span>key_type<span style="color:#f92672">&gt;&amp;</span> ks, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span> v, </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">const</span> spec s <span style="color:#f92672">=</span> spec<span style="color:#f92672">::</span>default_version()); </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>フォーマット情報と<code>spec</code>が矛盾する場合、例えば<code>v1.0.0</code>で<code>table_format::multiline_oneline</code>が指定されているときなどは、<code>spec</code>が優先されます。</p> <h3 id="formatv-spec"> <code>format(v, spec)</code> <a class="anchor" href="#formatv-spec">#</a> </h3> <p><code>toml::value</code>を、それが持つフォーマット情報と<code>spec</code>に従ってフォーマットします。</p> <p><code>table_type</code>だった場合、それがルートであるとしてフォーマットします。 それ以外の値だった場合、値のみをフォーマットします。</p> <h3 id="formatk-v-spec"> <code>format(k, v, spec)</code> <a class="anchor" href="#formatk-v-spec">#</a> </h3> <p><code>toml::value</code>を、与えられたキーと同時にフォーマットします。</p> <p><code>v</code>はそのキー以下に定義されていると解釈されます。</p> <h3 id="formatk-v-spec-1"> <code>format([k,...], v, spec)</code> <a class="anchor" href="#formatk-v-spec-1">#</a> </h3> <p><code>v</code>はそのキー以下に定義されていると解釈されます。 キーが複数与えられた場合、再帰的に定義されたテーブルとして解釈されます。</p>source_location.hpphttps://toruniina.github.io/toml11/ja/docs/reference/source_location/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/source_location/<h1 id="source_locationhpp"> source_location.hpp <a class="anchor" href="#source_locationhpp">#</a> </h1> <p><code>source_location.hpp</code>では、TOMLファイル内のある領域を指すクラスが定義されます。</p> <p>このクラスは、エラーメッセージで問題の箇所を指摘するために使われます。</p> <h1 id="tomlsource_location"> <code>toml::source_location</code> <a class="anchor" href="#tomlsource_location">#</a> </h1> <p><code>source_location</code>は、TOMLファイル内のある領域を指すクラスです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">source_location</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">public</span><span style="color:#f92672">:</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">explicit</span> source_location(<span style="color:#75715e">/* implementation-defined */</span>); </span></span><span style="display:flex;"><span> <span style="color:#f92672">~</span>source_location() <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> source_location(source_location <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> source_location(source_location <span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> source_location<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(source_location <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> source_location<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">=</span>(source_location <span style="color:#f92672">&amp;&amp;</span>) <span style="color:#f92672">=</span> <span style="color:#66d9ef">default</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">bool</span> <span style="color:#a6e22e">is_ok</span>() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t length() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t first_line_number() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t first_column_number() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t last_line_number() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t last_column_number() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> file_name() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>size_t num_lines() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> first_line() <span style="color:#66d9ef">const</span>; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> last_line() <span style="color:#66d9ef">const</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>std<span style="color:#f92672">::</span>string<span style="color:#f92672">&gt;</span> <span style="color:#66d9ef">const</span><span style="color:#f92672">&amp;</span> lines() <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> ... Ts<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string format_location(<span style="color:#66d9ef">const</span> source_location<span style="color:#f92672">&amp;</span> loc, <span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> msg, <span style="color:#66d9ef">const</span> Ts<span style="color:#f92672">&amp;</span> ... locs_and_msgs); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">//toml </span></span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="コンストラクタ"> コンストラクタ <a class="anchor" href="#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">explicit</span> <span style="color:#a6e22e">source_location</span>(<span style="color:#75715e">/* implementation-defined */</span>); </span></span></code></pre></div><p><code>toml::source_location</code>を<code>toml::parse</code>または<code>_toml</code>リテラル以外で構築することはできません。</p>spec.hpphttps://toruniina.github.io/toml11/ja/docs/reference/spec/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/spec/<h1 id="spechpp"> spec.hpp <a class="anchor" href="#spechpp">#</a> </h1> <p><code>spec.hpp</code>では、TOMLのバージョンを指定するためのクラスが定義されます。</p> <h1 id="tomlsemantic_version"> <code>toml::semantic_version</code> <a class="anchor" href="#tomlsemantic_version">#</a> </h1> <p><code>semantic_version</code>は、バージョン情報を格納するクラスです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">semantic_version</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">constexpr</span> <span style="color:#a6e22e">semantic_version</span>(std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> mjr, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> mnr, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> p) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> major; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> minor; </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> patch; </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> semantic_version </span></span><span style="display:flex;"><span><span style="color:#a6e22e">make_semver</span>(std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> major, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> minor, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> patch) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">==</span>(<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">!=</span>(<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;</span> (<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;=</span>(<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;</span> (<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;=</span>(<span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, <span style="color:#66d9ef">const</span> semantic_version<span style="color:#f92672">&amp;</span> ver); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">//toml </span></span></span></code></pre></div><h2 id="メンバ関数"> メンバ関数 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="コンストラクタ"> コンストラクタ <a class="anchor" href="#%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">constexpr</span> <span style="color:#a6e22e">semantic_version</span>(std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> mjr, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> mnr, std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint32_t</span> p) <span style="color:#66d9ef">noexcept</span>; </span></span></code></pre></div><p><code>major</code>, <code>minor</code>, <code>patch</code>バージョンを指定して構築します。</p>toml_fwd.hpphttps://toruniina.github.io/toml11/ja/docs/reference/toml_fwd/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/toml_fwd/<h1 id="toml_fwdhpp"> toml_fwd.hpp <a class="anchor" href="#toml_fwdhpp">#</a> </h1> <p><code>toml_fwd.hpp</code>は、toml11で定義される構造体の前方宣言と、マクロ定義を持ちます。</p> <p>toml11の構造体についての前方宣言しか必要なく実装が必要ない場合、 <code>toml.hpp</code> のかわりにこちらを <code>include</code> することでコンパイル時間を短縮できます。</p> <blockquote class="book-hint warning"> このファイルには前方宣言しか含まれていないため、 <code>toml::basic_value&lt;toml::type_config&gt;::table_type</code> として定義される <code>toml::table</code> と、同様に定義される <code>toml::array</code> は使用できません。 それらには <code>basic_value</code> の実装が必要だからです。 </blockquote> <p>このヘッダファイルと <code>toml.hpp</code> は <code>${TOML11_INCLUDE_DIR}/</code> 以下に、 他のヘッダファイルは <code>${TOML11_INCLUDE_DIR}/toml11/</code> 以下にあります。</p>toml.hpphttps://toruniina.github.io/toml11/ja/docs/reference/toml/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/toml/<h1 id="tomlhpp"> toml.hpp <a class="anchor" href="#tomlhpp">#</a> </h1> <p><code>toml.hpp</code>は、他の全てのヘッダを <code>include</code> します。</p> <p>これによって、toml11の全機能が使用可能になります。</p> <p>このヘッダファイルと <code>toml_fwd.hpp</code> は <code>${TOML11_INCLUDE_DIR}/</code> 以下に、 他のヘッダファイルは <code>${toml11_include_dir}/toml11/</code> 以下にあります。</p>types.hpphttps://toruniina.github.io/toml11/ja/docs/reference/types/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/types/<h1 id="typeshpp"> types.hpp <a class="anchor" href="#typeshpp">#</a> </h1> <p>型情報を与えるクラスが定義されます。</p> <h1 id="type_config"> <code>type_config</code> <a class="anchor" href="#type_config">#</a> </h1> <p><code>type_config</code>は、<code>toml::basic_value</code>に与えられるパラメータをまとめた型です。</p> <p><code>toml::basic_value&lt;T&gt;</code>内で異なる型を使用する場合、これを別に定義して渡します。 記載のある要素は全て必須の要素です。</p> <p>通常のストリーム演算子を使用できない数値型を使用する場合、<code>read_int</code>、<code>read_float</code>に相当するものを定義し、置き換えてください。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">type_config</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> comment_type <span style="color:#f92672">=</span> preserve_comments; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> boolean_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">bool</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> integer_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">int64_t</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> floating_type <span style="color:#f92672">=</span> <span style="color:#66d9ef">double</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> string_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>string; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> array_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>vector<span style="color:#f92672">&lt;</span>T<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> K, <span style="color:#66d9ef">typename</span> T<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">using</span> table_type <span style="color:#f92672">=</span> std<span style="color:#f92672">::</span>unordered_map<span style="color:#f92672">&lt;</span>K, T<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> result<span style="color:#f92672">&lt;</span>integer_type, error_info<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> parse_int(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> str, <span style="color:#66d9ef">const</span> source_location src, <span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> base); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">static</span> result<span style="color:#f92672">&lt;</span>floating_type, error_info<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> parse_float(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> str, <span style="color:#66d9ef">const</span> source_location src, <span style="color:#66d9ef">const</span> <span style="color:#66d9ef">bool</span> is_hex); </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> value <span style="color:#f92672">=</span> basic_value<span style="color:#f92672">&lt;</span>type_config<span style="color:#f92672">&gt;</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> table <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> value<span style="color:#f92672">::</span>table_type; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> array <span style="color:#f92672">=</span> <span style="color:#66d9ef">typename</span> value<span style="color:#f92672">::</span>array_type; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="static-メンバ関数"> <code>static</code> メンバ関数 <a class="anchor" href="#static-%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="parse_intstr-src-base"> <code>parse_int(str, src, base)</code> <a class="anchor" href="#parse_intstr-src-base">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">static</span> result<span style="color:#f92672">&lt;</span>integer_type, error_info<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span>parse_int(<span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span>string<span style="color:#f92672">&amp;</span> str, <span style="color:#66d9ef">const</span> source_location src, <span style="color:#66d9ef">const</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> base); </span></span></code></pre></div><p>通常のストリーム演算子などを使用できない型を<code>integer_type</code>として使用する場合、この関数を実装してください。</p>value_t.hpphttps://toruniina.github.io/toml11/ja/docs/reference/value_t/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/value_t/<h1 id="value_thpp"> value_t.hpp <a class="anchor" href="#value_thpp">#</a> </h1> <p>型情報を表す列挙型です。</p> <h1 id="value_t"> <code>value_t</code> <a class="anchor" href="#value_t">#</a> </h1> <p><code>value_t</code>は、<code>toml::value</code>が持つ型情報を扱う際に使用します。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">enum</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">value_t</span> <span style="color:#f92672">:</span> std<span style="color:#f92672">::</span><span style="color:#66d9ef">uint8_t</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> empty <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>, </span></span><span style="display:flex;"><span> boolean <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>, </span></span><span style="display:flex;"><span> integer <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>, </span></span><span style="display:flex;"><span> floating <span style="color:#f92672">=</span> <span style="color:#ae81ff">3</span>, </span></span><span style="display:flex;"><span> string <span style="color:#f92672">=</span> <span style="color:#ae81ff">4</span>, </span></span><span style="display:flex;"><span> offset_datetime <span style="color:#f92672">=</span> <span style="color:#ae81ff">5</span>, </span></span><span style="display:flex;"><span> local_datetime <span style="color:#f92672">=</span> <span style="color:#ae81ff">6</span>, </span></span><span style="display:flex;"><span> local_date <span style="color:#f92672">=</span> <span style="color:#ae81ff">7</span>, </span></span><span style="display:flex;"><span> local_time <span style="color:#f92672">=</span> <span style="color:#ae81ff">8</span>, </span></span><span style="display:flex;"><span> array <span style="color:#f92672">=</span> <span style="color:#ae81ff">9</span>, </span></span><span style="display:flex;"><span> table <span style="color:#f92672">=</span> <span style="color:#ae81ff">10</span> </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, value_t t); </span></span><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string to_string(value_t t); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><h2 id="非メンバ関数"> 非メンバ関数 <a class="anchor" href="#%e9%9d%9e%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="ストリーム演算子"> ストリーム演算子 <a class="anchor" href="#%e3%82%b9%e3%83%88%e3%83%aa%e3%83%bc%e3%83%a0%e6%bc%94%e7%ae%97%e5%ad%90">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;&lt;</span>(std<span style="color:#f92672">::</span>ostream<span style="color:#f92672">&amp;</span> os, value_t t); </span></span></code></pre></div><p><code>value_t</code>の値を文字列化してストリームへ出力します。</p> <h3 id="to_string"> <code>to_string</code> <a class="anchor" href="#to_string">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span>std<span style="color:#f92672">::</span>string to_string(value_t t); </span></span></code></pre></div><p><code>value_t</code>の値を文字列化して返します。</p>value.hpphttps://toruniina.github.io/toml11/ja/docs/reference/value/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/value/<h1 id="valuehpp"> value.hpp <a class="anchor" href="#valuehpp">#</a> </h1> <p><code>value.hpp</code>では、<code>basic_value</code>が定義されます。</p> <h1 id="tomlbasic_value"> <code>toml::basic_value</code> <a class="anchor" href="#tomlbasic_value">#</a> </h1> <p><code>basic_value</code>は、TOMLの値を格納するクラスです。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span> <span style="color:#f92672">&lt;</span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">TypeConfig</span><span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">basic_value</span>; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#75715e">// 以下はtypes.hppで定義される </span></span></span><span style="display:flex;"><span><span style="color:#75715e">// using value = basic_value&lt;type_config&gt;; </span></span></span><span style="display:flex;"><span><span style="color:#75715e">// using table = typename basic_value&lt;type_config&gt;::table_type; </span></span></span><span style="display:flex;"><span><span style="color:#75715e">// using array = typename basic_value&lt;type_config&gt;::array_type; </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">==</span>(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">!=</span>(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;</span> (<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&lt;=</span>(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;</span> (<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> TC<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">bool</span> <span style="color:#66d9ef">operator</span><span style="color:#f92672">&gt;=</span>(<span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>, <span style="color:#66d9ef">const</span> basic_value<span style="color:#f92672">&lt;</span>TC<span style="color:#f92672">&gt;&amp;</span>); </span></span><span style="display:flex;"><span>} <span style="color:#75715e">//toml </span></span></span></code></pre></div><h2 id="メンバ型"> メンバ型 <a class="anchor" href="#%e3%83%a1%e3%83%b3%e3%83%90%e5%9e%8b">#</a> </h2> <p>以下のメンバ型が定義されます。</p>version.hpphttps://toruniina.github.io/toml11/ja/docs/reference/version/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/version/<h1 id="versionhpp"> version.hpp <a class="anchor" href="#versionhpp">#</a> </h1> <p><code>version.hpp</code>では、toml11とC++のバージョン情報に関係するマクロが定義されます。</p> <h2 id="マクロ"> マクロ <a class="anchor" href="#%e3%83%9e%e3%82%af%e3%83%ad">#</a> </h2> <h3 id="toml11_version_major"> <code>TOML11_VERSION_MAJOR</code> <a class="anchor" href="#toml11_version_major">#</a> </h3> <p>toml11のメジャーバージョンです。</p> <h3 id="toml11_version_minor"> <code>TOML11_VERSION_MINOR</code> <a class="anchor" href="#toml11_version_minor">#</a> </h3> <p>toml11のマイナーバージョンです。</p> <h3 id="toml11_version_patch"> <code>TOML11_VERSION_PATCH</code> <a class="anchor" href="#toml11_version_patch">#</a> </h3> <p>toml11のパッチバージョンです。</p> <h2 id="関数"> 関数 <a class="anchor" href="#%e9%96%a2%e6%95%b0">#</a> </h2> <h3 id="license_notice"> <code>license_notice</code> <a class="anchor" href="#license_notice">#</a> </h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#66d9ef">char</span><span style="color:#f92672">*</span> <span style="color:#a6e22e">license_notice</span>() <span style="color:#66d9ef">noexcept</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>ライセンス条項を返します。</p> <p>ソースコードを公開せずに頒布する際の利便性のために用意されています。</p>visit.hpphttps://toruniina.github.io/toml11/ja/docs/reference/visit/Mon, 01 Jan 0001 00:00:00 +0000https://toruniina.github.io/toml11/ja/docs/reference/visit/<h1 id="visithpp"> visit.hpp <a class="anchor" href="#visithpp">#</a> </h1> <p><code>visit.hpp</code>では、<code>toml::visit</code>が定義されます。</p> <h1 id="tomlvisit"> <code>toml::visit</code> <a class="anchor" href="#tomlvisit">#</a> </h1> <h2 id="関数"> 関数 <a class="anchor" href="#%e9%96%a2%e6%95%b0">#</a> </h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">namespace</span> toml </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">template</span><span style="color:#f92672">&lt;</span><span style="color:#66d9ef">typename</span> Visitor, <span style="color:#66d9ef">typename</span> ... Args<span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span><span style="color:#75715e">/* visitor にArgsの中身を渡した際の返り値 */</span> </span></span><span style="display:flex;"><span>visit(Visitor<span style="color:#f92672">&amp;&amp;</span> visitor, Args<span style="color:#f92672">&amp;&amp;</span> ... args); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>} <span style="color:#75715e">// toml </span></span></span></code></pre></div><p><code>basic_value&lt;TC&gt;</code>が保持している型に対応する<code>Visitor</code>のオーバーロードを呼び出し、その結果を返します。</p> <h4 id="条件"> 条件 <a class="anchor" href="#%e6%9d%a1%e4%bb%b6">#</a> </h4> <p><code>Visitor</code>は、<code>basic_value&lt;TC&gt;</code>が保持している型のどれに対しても呼び出し可能な関数または関数オブジェクトでなければなりません。</p> <p>また、それぞれのオーバーロードで返り値は同じであることが要求されます。</p> <h4 id="例"> 例 <a class="anchor" href="#%e4%be%8b">#</a> </h4> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;toml.hpp&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e">#include</span> <span style="color:#75715e">&lt;iostream&gt;</span><span style="color:#75715e"> </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">struct</span> <span style="color:#a6e22e">type_name_of</span> </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>boolean_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;boolean&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>integer_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;integer&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>floating_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;floating&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>string_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;string&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>local_time_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;local_time&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>local_date_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;local_date&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>local_datetime_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;local_datetime&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>offset_datetime_type<span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;offset_datetime&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>array_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;array&#34;</span>;} </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>string <span style="color:#66d9ef">operator</span>()(<span style="color:#66d9ef">const</span> toml<span style="color:#f92672">::</span>value<span style="color:#f92672">::</span>table_type <span style="color:#f92672">&amp;</span>) <span style="color:#66d9ef">const</span> {<span style="color:#66d9ef">return</span> <span style="color:#e6db74">&#34;table&#34;</span>;} </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">int</span> <span style="color:#a6e22e">main</span>() </span></span><span style="display:flex;"><span>{ </span></span><span style="display:flex;"><span> toml<span style="color:#f92672">::</span>value v(<span style="color:#ae81ff">3.14</span>); </span></span><span style="display:flex;"><span> std<span style="color:#f92672">::</span>cout <span style="color:#f92672">&lt;&lt;</span> toml<span style="color:#f92672">::</span>visit(type_name_of{}, v) <span style="color:#f92672">&lt;&lt;</span> std<span style="color:#f92672">::</span>endl; <span style="color:#75715e">// floating </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">return</span> <span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h1 id="関連項目"> 関連項目 <a class="anchor" href="#%e9%96%a2%e9%80%a3%e9%a0%85%e7%9b%ae">#</a> </h1> <ul> <li><a href="https://toruniina.github.io/toml11/ja/docs/reference/value/">value.hpp</a></li> </ul>