Files
toml11/ja/docs/reference/find/index.html
ToruNiina e671b8e3bd Merge pull request #291 from franzpoeschel/namespace-versioning
Use an inline namespace to distinguish emitted symbols by version numbers e4051f77d7
2025-05-17 07:21:19 +00:00

159 lines
44 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=ja dir=ltr><head><meta charset=UTF-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content='
find.hpp
#
toml::valueから値を検索し、同時に必要な場合型変換を行う関数です。
toml::value は格納する型を変更でき、toml::findはそれらに対応しているので、
厳密には全て toml::basic_value<TC> が使われています。ただしこれでは冗長なので、
関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では toml::value と書きます。
説明文では、テンプレートパラメータTCを変更して型が変更されていれば
toml::value::integer_type などの型は追従して変更されると解釈してください。
toml::find
#
概要
#
toml::findには、取り出したい型をテンプレート引数で、検索したい値のキーを引数で与えます。
template<typename T, typename TC, typename ... Keys>
T find(const basic_value<TC>& v, Keys ... keys);
サポートされている T の種類と変換の挙動に関しては、 toml::get と同様です。
T が指定されなかった場合、 toml::value が返されます。
キーは、 toml::value::key_type または std::size_t です。
複数個のキーが与えられた場合は、サブテーブルや配列に対して再帰的に検索が行われます。
toml::value::key_type が与えられた場合は toml::table として、 std::size_t が与えられた場合は toml::array として解釈されます。
再帰的な検索に関しての注意
#
TOMLには通常の bare key の他に、 " や &#39; で囲まれた quoted key というものがあります。
quoted key を使うと、 "foo.bar" = "baz" というようなキーを書くことができ、この場合はサブテーブルは構築されず、キーは foo.barとなります。
このようなパターンに対応するため、toml11ではキーの中に.が含まれていても分割は行わず、そのままの文字列で検索を行います。'><meta name=theme-color media="(prefers-color-scheme: light)" content="#ffffff"><meta name=theme-color media="(prefers-color-scheme: dark)" content="#343a40"><meta name=color-scheme content="light dark"><meta property="og:url" content="https://toruniina.github.io/toml11/ja/docs/reference/find/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="find.hpp"><meta property="og:description" content='find.hpp # toml::valueから値を検索し、同時に必要な場合型変換を行う関数です。
toml::value は格納する型を変更でき、toml::findはそれらに対応しているので、 厳密には全て toml::basic_value<TC> が使われています。ただしこれでは冗長なので、 関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では toml::value と書きます。 説明文では、テンプレートパラメータTCを変更して型が変更されていれば toml::value::integer_type などの型は追従して変更されると解釈してください。 toml::find # 概要 # toml::findには、取り出したい型をテンプレート引数で、検索したい値のキーを引数で与えます。
template<typename T, typename TC, typename ... Keys> T find(const basic_value<TC>& v, Keys ... keys); サポートされている T の種類と変換の挙動に関しては、 toml::get と同様です。
T が指定されなかった場合、 toml::value が返されます。
キーは、 toml::value::key_type または std::size_t です。 複数個のキーが与えられた場合は、サブテーブルや配列に対して再帰的に検索が行われます。 toml::value::key_type が与えられた場合は toml::table として、 std::size_t が与えられた場合は toml::array として解釈されます。
再帰的な検索に関しての注意 # TOMLには通常の bare key の他に、 " や &#39; で囲まれた quoted key というものがあります。 quoted key を使うと、 "foo.bar" = "baz" というようなキーを書くことができ、この場合はサブテーブルは構築されず、キーは foo.barとなります。 このようなパターンに対応するため、toml11ではキーの中に.が含まれていても分割は行わず、そのままの文字列で検索を行います。'><meta property="og:locale" content="ja"><meta property="og:type" content="article"><meta property="article:section" content="docs"><title>find.hpp | toml11</title>
<link rel=manifest href=/toml11/manifest.json><link rel=icon href=/toml11/favicon.png><link rel=canonical href=https://toruniina.github.io/toml11/ja/docs/reference/find/><link rel=alternate hreflang=en href=https://toruniina.github.io/toml11/docs/reference/find/ title=find.hpp><link rel=stylesheet href=/toml11/book.min.ddac3efe7ea4c1007ff53e5a8fd67f12517e5d2e99984d8c67a18668f7ecaa03.css integrity="sha256-3aw+/n6kwQB/9T5aj9Z/ElF+XS6ZmE2MZ6GGaPfsqgM=" crossorigin=anonymous><script defer src=/toml11/fuse.min.js></script><script defer src=/toml11/ja.search.min.13aefbf6a803b591c02d5bc9a01dfe65fe37c31e2915c91573708d38e805d86c.js integrity="sha256-E6779qgDtZHALVvJoB3+Zf43wx4pFckVc3CNOOgF2Gw=" crossorigin=anonymous></script></head><body dir=ltr><input type=checkbox class="hidden toggle" id=menu-control>
<input type=checkbox class="hidden toggle" id=toc-control><main class="container flex"><aside class=book-menu><div class=book-menu-content><nav><h2 class=book-brand><a class="flex align-center" href=/toml11/ja/><span>toml11</span></a></h2><div class="book-search hidden"><input type=text id=book-search-input placeholder=検索 aria-label=検索 maxlength=64 data-hotkeys=s/><div class="book-search-spinner hidden"></div><ul id=book-search-results></ul></div><script>document.querySelector(".book-search").classList.remove("hidden")</script><ul class=book-languages><li><input type=checkbox id=languages class=toggle>
<label for=languages class="flex justify-between"><a role=button class="flex align-center"><img src=/toml11/svg/translate.svg class=book-icon alt=Languages>
日本語</a></label><ul><li><a href=https://toruniina.github.io/toml11/docs/reference/find/>English</a></li></ul></li></ul><ul><li><a href=/toml11/ja/docs/installation/>installation</a><ul></ul></li><li><input type=checkbox id=section-b4cfb5b55e913a8d853eacf5e8fba05f class=toggle>
<label for=section-b4cfb5b55e913a8d853eacf5e8fba05f class="flex justify-between"><a href=/toml11/ja/docs/features/>features</a></label><ul><li><a href=/toml11/ja/docs/features/parsing_files/>parsing files</a></li><li><a href=/toml11/ja/docs/features/value/>getting values</a></li><li><a href=/toml11/ja/docs/features/error_message/>error message</a></li><li><a href=/toml11/ja/docs/features/serialize/>serializing values</a></li><li><a href=/toml11/ja/docs/features/configure_types/>configuring types</a></li><li><a href=/toml11/ja/docs/features/literal/>toml literal</a></li><li><a href=/toml11/ja/docs/features/toml_spec/>toml spec</a></li><li><a href=/toml11/ja/docs/features/extension/>extension</a></li></ul></li><li><input type=checkbox id=section-01b096afc5186aea96713b408b47c967 class=toggle checked>
<label for=section-01b096afc5186aea96713b408b47c967 class="flex justify-between"><a href=/toml11/ja/docs/reference/>reference</a></label><ul><li><a href=/toml11/ja/docs/reference/color/>color.hpp</a></li><li><a href=/toml11/ja/docs/reference/comments/>comments.hpp</a></li><li><a href=/toml11/ja/docs/reference/conversion/>conversion.hpp</a></li><li><a href=/toml11/ja/docs/reference/datetime/>datetime.hpp</a></li><li><a href=/toml11/ja/docs/reference/error_info/>error_info.hpp</a></li><li><a href=/toml11/ja/docs/reference/exception/>exception.hpp</a></li><li><a href=/toml11/ja/docs/reference/find/ class=active>find.hpp</a></li><li><a href=/toml11/ja/docs/reference/format/>format.hpp</a></li><li><a href=/toml11/ja/docs/reference/from/>from.hpp</a></li><li><a href=/toml11/ja/docs/reference/get/>get.hpp</a></li><li><a href=/toml11/ja/docs/reference/into/>into.hpp</a></li><li><a href=/toml11/ja/docs/reference/literal/>literal.hpp</a></li><li><a href=/toml11/ja/docs/reference/ordered_map/>ordered_map.hpp</a></li><li><a href=/toml11/ja/docs/reference/parser/>parser.hpp</a></li><li><a href=/toml11/ja/docs/reference/result/>result.hpp</a></li><li><a href=/toml11/ja/docs/reference/serializer/>serializer.hpp</a></li><li><a href=/toml11/ja/docs/reference/source_location/>source_location.hpp</a></li><li><a href=/toml11/ja/docs/reference/spec/>spec.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml_fwd/>toml_fwd.hpp</a></li><li><a href=/toml11/ja/docs/reference/toml/>toml.hpp</a></li><li><a href=/toml11/ja/docs/reference/types/>types.hpp</a></li><li><a href=/toml11/ja/docs/reference/value_t/>value_t.hpp</a></li><li><a href=/toml11/ja/docs/reference/value/>value.hpp</a></li><li><a href=/toml11/ja/docs/reference/version/>version.hpp</a></li><li><a href=/toml11/ja/docs/reference/visit/>visit.hpp</a></li></ul></li><li><a href=/toml11/ja/docs/changelog/>changelog</a><ul></ul></li></ul><ul><li><a href=https://github.com/ToruNiina/toml11 target=_blank rel=noopener>GitHub</a></li></ul></nav><script>(function(){var e=document.querySelector("aside .book-menu-content");addEventListener("beforeunload",function(){localStorage.setItem("menu.scrollTop",e.scrollTop)}),e.scrollTop=localStorage.getItem("menu.scrollTop")})()</script></div></aside><div class=book-page><header class=book-header><div class="flex align-center justify-between"><label for=menu-control><img src=/toml11/svg/menu.svg class=book-icon alt=Menu>
</label><strong>find.hpp</strong>
<label for=toc-control><img src=/toml11/svg/toc.svg class=book-icon alt="Table of Contents"></label></div><aside class="hidden clearfix"><nav id=TableOfContents><ul><li><a href=#findhpp>find.hpp</a></li><li><a href=#tomlfind><code>toml::find</code></a><ul><li><a href=#概要>概要</a><ul><li><a href=#再帰的な検索に関しての注意>再帰的な検索に関しての注意</a></li></ul></li><li><a href=#tomlfindvalue-key><code>toml::find(value, key)</code></a><ul><li><a href=#例外>例外</a></li></ul></li><li><a href=#tomlfindvalue-index><code>toml::find(value, index)</code></a><ul><li><a href=#例外-1>例外</a></li></ul></li><li><a href=#tomlfindvalue-keys><code>toml::find(value, keys...)</code></a></li></ul></li><li><a href=#tomlfind_orvalue-key-fallback><code>toml::find_or(value, key, fallback)</code></a><ul><li><a href=#tがbasic_valueである場合><code>T</code><code>basic_value</code>である場合</a></li><li><a href=#tがtomlvaluesome_typeである場合><code>T</code><code>toml::value::{some_type}</code>である場合</a></li><li><a href=#tがconst-charである場合><code>T</code><code>const char*</code>である場合</a></li><li><a href=#tがその他の型である場合><code>T</code>がその他の型である場合</a></li><li><a href=#複数のキーが与えられた場合>複数のキーが与えられた場合</a></li></ul></li><li><a href=#関連項目>関連項目</a></li></ul></nav></aside></header><article class="markdown book-article"><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></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>"</code><code>'</code> で囲まれた quoted key というものがあります。
quoted key を使うと、 <code>"foo.bar" = "baz"</code> というようなキーを書くことができ、この場合はサブテーブルは構築されず、キーは <code>foo.bar</code>となります。
このようなパターンに対応するため、toml11ではキーの中に<code>.</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-toml data-lang=toml><span style=display:flex><span>[<span style=color:#a6e22e>foo</span>]
</span></span><span style=display:flex><span>[<span style=color:#a6e22e>foo</span>.<span style=color:#a6e22e>bar</span>]
</span></span><span style=display:flex><span><span style=color:#a6e22e>baz</span> = <span style=color:#e6db74>&#34;hoge&#34;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[<span style=color:#e6db74>&#34;foo.bar&#34;</span>]
</span></span><span style=display:flex><span><span style=color:#a6e22e>baz</span> = <span style=color:#e6db74>&#34;fuga&#34;</span>
</span></span></code></pre></div><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>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>const</span> <span style=color:#66d9ef>auto</span> baz1 <span style=color:#f92672>=</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>(input, <span style=color:#e6db74>&#34;foo&#34;</span>, <span style=color:#e6db74>&#34;bar&#34;</span>, <span style=color:#e6db74>&#34;baz&#34;</span>); <span style=color:#75715e>// hoge
</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> baz2 <span style=color:#f92672>=</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>(input, <span style=color:#e6db74>&#34;foo.bar&#34;</span>, <span style=color:#e6db74>&#34;baz&#34;</span>); <span style=color:#75715e>// fuga
</span></span></span></code></pre></div><p>参考:<a href=https://toml.io/ja/v1.0.0#%E3%82%AD%E3%83%BC>toml.io/ja/v1.0.0#キー</a></p><h2 id=tomlfindvalue-key><code>toml::find(value, key)</code>
<a class=anchor href=#tomlfindvalue-key>#</a></h2><p><code>value</code><code>toml::table</code> として <code>key</code> を検索したあと、 <code>toml::get</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><span style=color:#75715e>/* toml::get&lt;T&gt;(const value&amp;) と同等 */</span> find(
</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 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> ky);
</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:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <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> ky);
</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:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, <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> ky);
</span></span></code></pre></div><p><code>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>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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> v, <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> ky);
</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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <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> ky);
</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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, <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> ky);
</span></span></code></pre></div><h3 id=例外>例外
<a class=anchor href=#%e4%be%8b%e5%a4%96>#</a></h3><p><code>toml::value</code><code>table</code> を保持していなかった場合、 <code>toml::type_error</code> が送出されます。</p><p>格納している <code>table</code> が指定された要素を持っていなかった場合、 <code>std::out_of_range</code> が送出されます。</p><p>指定された要素が <code>T</code> に変換できない場合 <code>toml::get</code> が変換に失敗する場合) 、
<code>toml::type_error</code> が送出されます。</p><h2 id=tomlfindvalue-index><code>toml::find(value, index)</code>
<a class=anchor href=#tomlfindvalue-index>#</a></h2><p><code>value</code><code>toml::array</code> として <code>index</code> 番目にアクセスし、 <code>toml::get</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><span style=color:#75715e>/* toml::get&lt;T&gt;(const value&amp;) と同等 */</span> find(
</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 style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t index);
</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:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t index);
</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:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t index);
</span></span></code></pre></div><p><code>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>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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> find(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t ky);
</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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> find(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t ky);
</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>basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;</span> find(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, <span style=color:#66d9ef>const</span> std<span style=color:#f92672>::</span>size_t ky);
</span></span></code></pre></div><h3 id=例外-1>例外
<a class=anchor href=#%e4%be%8b%e5%a4%96-1>#</a></h3><p><code>toml::value</code><code>array</code> を保持していなかった場合、 <code>toml::type_error</code> が送出されます。</p><p>格納している <code>array</code> が指定された数の要素を持っていなかった場合、<code>std::out_of_range</code>が送出されます。</p><p>指定された要素が <code>T</code> に変換できない場合 <code>toml::get</code> が変換に失敗する場合) 、
<code>toml::type_error</code> が送出されます。</p><h2 id=tomlfindvalue-keys><code>toml::find(value, keys...)</code>
<a class=anchor href=#tomlfindvalue-keys>#</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>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> K1, <span style=color:#66d9ef>typename</span> K2, <span style=color:#66d9ef>typename</span> ... Ks<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(const value&amp;) と同等 */</span> find(
</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 style=color:#66d9ef>const</span> K1<span style=color:#f92672>&amp;</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&amp;</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&amp;</span> ... ks);
</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:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K1, <span style=color:#66d9ef>typename</span> K2, <span style=color:#66d9ef>typename</span> ... Ks<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&amp;</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&amp;</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&amp;</span> ... ks);
</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:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K1, <span style=color:#66d9ef>typename</span> K2, <span style=color:#66d9ef>typename</span> ... Ks<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get&lt;T&gt;(value&amp;&amp;) と同等 */</span> find(
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&amp;</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&amp;</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&amp;</span> ... ks);
</span></span></code></pre></div><p>再帰的に<code>toml::find</code>が呼び出されます。</p><p>失敗する条件とその際に送出される例外は <code>toml::find</code> と同じです。</p><h1 id=tomlfind_orvalue-key-fallback><code>toml::find_or(value, key, fallback)</code>
<a class=anchor href=#tomlfind_orvalue-key-fallback>#</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>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> Key<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> Key<span style=color:#f92672>&amp;</span> key, T<span style=color:#f92672>&amp;&amp;</span> opt);
</span></span></code></pre></div><p><code>find_or</code> は失敗した際のためのデフォルト値を受け取ることで、失敗時に例外を投げないようにします。</p><p>このデフォルト値は受け取る型<code>T</code>と同じ型でなければなりません。
よって、 <code>toml::find&lt;T></code> とは違って、 <code>find_or</code> では <code>T</code> を指定せずとも推論されます。</p><p><code>find_or&lt;T></code>のように <code>T</code> を指定することもできますが、その場合は常に新規な値が返されます。
参照を取得したい場合は、 <code>T</code> を指定しないでください。</p><h2 id=tがbasic_valueである場合><code>T</code><code>basic_value</code>である場合
<a class=anchor href=#t%e3%81%8cbasic_value%e3%81%a7%e3%81%82%e3%82%8b%e5%a0%b4%e5%90%88>#</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<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;&amp;</span> find_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> key, basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> opt) <span style=color:#66d9ef>noexcept</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:#66d9ef>typename</span> K<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 style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> key, <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> opt) <span style=color:#66d9ef>noexcept</span>
</span></span></code></pre></div><p>対応する値を検索し、変換せずに返します。変換が必要ないため、参照を返すことができます。</p><p>値が見つからなかった場合、デフォルト値を返します。</p><h2 id=tがtomlvaluesome_typeである場合><code>T</code><code>toml::value::{some_type}</code>である場合
<a class=anchor href=#t%e3%81%8ctomlvaluesome_type%e3%81%a7%e3%81%82%e3%82%8b%e5%a0%b4%e5%90%88>#</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>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> K<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T<span style=color:#f92672>&amp;</span> find_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> key, T<span style=color:#f92672>&amp;</span> opt) <span style=color:#66d9ef>noexcept</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:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> key, <span style=color:#66d9ef>const</span> T<span style=color:#f92672>&amp;</span> opt) <span style=color:#66d9ef>noexcept</span>
</span></span></code></pre></div><p>対応する値を検索し、変換せずに返します。変換が必要ないため、参照を返すことができます。</p><p>値が見つからなかった場合、あるいは異なる型が格納されていた場合、デフォルト値を返します。</p><h2 id=tがconst-charである場合><code>T</code><code>const char*</code>である場合
<a class=anchor href=#t%e3%81%8cconst-char%e3%81%a7%e3%81%82%e3%82%8b%e5%a0%b4%e5%90%88>#</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>std<span style=color:#f92672>::</span>string find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> k, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>char</span><span style=color:#f92672>*</span> opt)
</span></span></code></pre></div><p>対応する値を検索し、 <code>std::string</code> として返します。</p><p>失敗時に <code>const char*</code> から <code>std::string</code> を構築するため、参照を返すことはできません。</p><h2 id=tがその他の型である場合><code>T</code>がその他の型である場合
<a class=anchor href=#t%e3%81%8c%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e5%9e%8b%e3%81%a7%e3%81%82%e3%82%8b%e5%a0%b4%e5%90%88>#</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>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> K<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&amp;</span> key, T opt)
</span></span></code></pre></div><p>対応する値を検索し、 <code>T</code> に変換して返します。</p><p>変換を行うため、参照を返すことはできません。</p><h2 id=複数のキーが与えられた場合>複数のキーが与えられた場合
<a class=anchor href=#%e8%a4%87%e6%95%b0%e3%81%ae%e3%82%ad%e3%83%bc%e3%81%8c%e4%b8%8e%e3%81%88%e3%82%89%e3%82%8c%e3%81%9f%e5%a0%b4%e5%90%88>#</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>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> Value, <span style=color:#66d9ef>typename</span> K1, <span style=color:#66d9ef>typename</span> K2, <span style=color:#66d9ef>typename</span> K3, <span style=color:#66d9ef>typename</span> ... Ks<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>auto</span> find_or(Value<span style=color:#f92672>&amp;&amp;</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&amp;</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&amp;</span> k2, K3<span style=color:#f92672>&amp;&amp;</span> k3, Ks<span style=color:#f92672>&amp;&amp;</span> ... keys) <span style=color:#66d9ef>noexcept</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>-&gt;</span> <span style=color:#66d9ef>decltype</span>(find_or(v, k2, std<span style=color:#f92672>::</span>forward<span style=color:#f92672>&lt;</span>K3<span style=color:#f92672>&gt;</span>(k3), std<span style=color:#f92672>::</span>forward<span style=color:#f92672>&lt;</span>Ks<span style=color:#f92672>&gt;</span>(keys)...))
</span></span></code></pre></div><p>キーの列の最後の要素がデフォルト値であると解釈して、再帰的に<code>find_or</code>を適用します。</p><p><code>T</code> の推論結果が <code>toml::value</code> または <code>toml::value::some_type</code> になる場合、参照を返すことができます。</p><p><code>T</code> を明示的に指定した場合、常に変換を行います。</p><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/get/>get.hpp</a></li><li><a href=https://toruniina.github.io/toml11/ja/docs/reference/value/>value.hpp</a></li></ul></article><footer class=book-footer><div class="flex flex-wrap justify-between"></div><script>(function(){function e(e){const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)}document.querySelectorAll("pre code").forEach(t=>{t.addEventListener("click",function(){if(window.getSelection().toString())return;e(t.parentElement),navigator.clipboard&&navigator.clipboard.writeText(t.parentElement.textContent)})})})()</script></footer><label for=menu-control class="hidden book-menu-overlay"></label></div><aside class=book-toc><div class=book-toc-content><nav id=TableOfContents><ul><li><a href=#findhpp>find.hpp</a></li><li><a href=#tomlfind><code>toml::find</code></a><ul><li><a href=#概要>概要</a><ul><li><a href=#再帰的な検索に関しての注意>再帰的な検索に関しての注意</a></li></ul></li><li><a href=#tomlfindvalue-key><code>toml::find(value, key)</code></a><ul><li><a href=#例外>例外</a></li></ul></li><li><a href=#tomlfindvalue-index><code>toml::find(value, index)</code></a><ul><li><a href=#例外-1>例外</a></li></ul></li><li><a href=#tomlfindvalue-keys><code>toml::find(value, keys...)</code></a></li></ul></li><li><a href=#tomlfind_orvalue-key-fallback><code>toml::find_or(value, key, fallback)</code></a><ul><li><a href=#tがbasic_valueである場合><code>T</code><code>basic_value</code>である場合</a></li><li><a href=#tがtomlvaluesome_typeである場合><code>T</code><code>toml::value::{some_type}</code>である場合</a></li><li><a href=#tがconst-charである場合><code>T</code><code>const char*</code>である場合</a></li><li><a href=#tがその他の型である場合><code>T</code>がその他の型である場合</a></li><li><a href=#複数のキーが与えられた場合>複数のキーが与えられた場合</a></li></ul></li><li><a href=#関連項目>関連項目</a></li></ul></nav></div></aside></main></body></html>