mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-19 11:28:11 +08:00
159 lines
44 KiB
HTML
159 lines
44 KiB
HTML
<!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 の他に、 " や ' で囲まれた 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 の他に、 " や ' で囲まれた 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<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><</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>></span>
|
||
</span></span><span style=display:flex><span>T find(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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>"hoge"</span>
|
||
</span></span><span style=display:flex><span>
|
||
</span></span><span style=display:flex><span>[<span style=color:#e6db74>"foo.bar"</span>]
|
||
</span></span><span style=display:flex><span><span style=color:#a6e22e>baz</span> = <span style=color:#e6db74>"fuga"</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>"input.toml"</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><</span>std<span style=color:#f92672>::</span>string<span style=color:#f92672>></span>(input, <span style=color:#e6db74>"foo"</span>, <span style=color:#e6db74>"bar"</span>, <span style=color:#e6db74>"baz"</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><</span>std<span style=color:#f92672>::</span>string<span style=color:#f92672>></span>(input, <span style=color:#e6db74>"foo.bar"</span>, <span style=color:#e6db74>"baz"</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(const value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v, <span style=color:#66d9ef>const</span> <span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>key_type<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(const value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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><</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> find(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> find(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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><</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> find(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</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><</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>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(const value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#75715e>/* toml::get<T>(value&&) と同等 */</span> find(
|
||
</span></span><span style=display:flex><span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&</span> k2, <span style=color:#66d9ef>const</span> Ks<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span>T find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> Key<span style=color:#f92672>&</span> key, T<span style=color:#f92672>&&</span> opt);
|
||
</span></span></code></pre></div><p><code>find_or</code> は失敗した際のためのデフォルト値を受け取ることで、失敗時に例外を投げないようにします。</p><p>このデフォルト値は受け取る型<code>T</code>と同じ型でなければなりません。
|
||
よって、 <code>toml::find<T></code> とは違って、 <code>find_or</code> では <code>T</code> を指定せずとも推論されます。</p><p><code>find_or<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><</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> find_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</span> key, basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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><</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>></span> <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</span> key, <span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span>T<span style=color:#f92672>&</span> find_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</span> key, T<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</span> key, <span style=color:#66d9ef>const</span> T<span style=color:#f92672>&</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><</span><span style=color:#66d9ef>typename</span> TC, <span style=color:#66d9ef>typename</span> K<span style=color:#f92672>></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><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span>T find_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, <span style=color:#66d9ef>const</span> K<span style=color:#f92672>&</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><</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>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#66d9ef>auto</span> find_or(Value<span style=color:#f92672>&&</span> v, <span style=color:#66d9ef>const</span> K1<span style=color:#f92672>&</span> k1, <span style=color:#66d9ef>const</span> K2<span style=color:#f92672>&</span> k2, K3<span style=color:#f92672>&&</span> k3, Ks<span style=color:#f92672>&&</span> ... keys) <span style=color:#66d9ef>noexcept</span>
|
||
</span></span><span style=display:flex><span> <span style=color:#f92672>-></span> <span style=color:#66d9ef>decltype</span>(find_or(v, k2, std<span style=color:#f92672>::</span>forward<span style=color:#f92672><</span>K3<span style=color:#f92672>></span>(k3), std<span style=color:#f92672>::</span>forward<span style=color:#f92672><</span>Ks<span style=color:#f92672>></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> |