mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-19 03:18:09 +08:00
196 lines
56 KiB
HTML
196 lines
56 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="
|
||
get.hpp
|
||
#
|
||
|
||
toml::valueから値を取り出し、同時に(必要な場合)型変換を行う関数です。
|
||
|
||
toml::value は格納する型を変更でき、toml::getはそれらに対応しているので、
|
||
厳密には全て toml::basic_value<TC> が使われています。ただしこれでは冗長なので、
|
||
関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では toml::value と書きます。
|
||
説明文では、テンプレートパラメータTCを変更して型が変更されていれば
|
||
toml::value::integer_type などの型は追従して変更されると解釈してください。
|
||
|
||
|
||
|
||
toml::get<T>
|
||
#
|
||
|
||
|
||
概要
|
||
#
|
||
|
||
基本的に、toml::getは以下のような関数として振る舞います。
|
||
Tはtoml::get<int>(v)のようにして与えます。
|
||
template<typename T, typename TC>
|
||
T get(const basic_value<TC>& v);
|
||
ただし、Tがどのような型であるかによって、toml::getは異なる挙動をします。
|
||
Tの型の種類は、
|
||
|
||
変換が必要ない型
|
||
変換する必要がある型
|
||
|
||
に分けられます。
|
||
細かい条件と、特別にサポートしている具体的な型については後述します。
|
||
|
||
変換が必要ない型
|
||
#
|
||
|
||
変換が必要ないのは、渡された toml::value が格納している型です。
|
||
例えば、 toml::value::integer_type は std::int64_t のエイリアスなので、
|
||
toml::get<std::int64_t>(v) は変換を必要としません。
|
||
この場合、 toml:get は integer の値を toml::value から取り出し、その参照を返します。
|
||
渡されたtoml::valueが可変参照(&)である場合、返す値も可変参照(&)です。
|
||
不変参照(const&)の場合、返す値も不変参照(const&)となります。
|
||
可変参照を返した場合、その参照を通してtoml::valueに格納されている値に上書きできます。
|
||
|
||
変換が必要な型
|
||
#
|
||
|
||
上記の型以外については変換が必要です。
|
||
例えば、toml::value::integer_typeはstd::int64_tのエイリアスなので、toml::get<std::size_t>(toml::value&)は変換が必要です。
|
||
この場合、toml:getはintegerの値をtoml::valueから取り出し、それをキャストして返します。
|
||
toml11は簡単なキャストだけでなく、
|
||
toml::arrayからやstd::tuple<int, double, std::string>やstd::array<double, 4>、
|
||
toml::tableからstd::map<std::string, int>などの複雑な型変換をサポートします。
|
||
具体的には、続くセクションを参照してください。"><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/get/"><meta property="og:site_name" content="toml11"><meta property="og:title" content="get.hpp"><meta property="og:description" content="get.hpp # toml::valueから値を取り出し、同時に(必要な場合)型変換を行う関数です。
|
||
toml::value は格納する型を変更でき、toml::getはそれらに対応しているので、 厳密には全て toml::basic_value<TC> が使われています。ただしこれでは冗長なので、 関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では toml::value と書きます。 説明文では、テンプレートパラメータTCを変更して型が変更されていれば toml::value::integer_type などの型は追従して変更されると解釈してください。 toml::get<T> # 概要 # 基本的に、toml::getは以下のような関数として振る舞います。 Tはtoml::get<int>(v)のようにして与えます。
|
||
template<typename T, typename TC> T get(const basic_value<TC>& v); ただし、Tがどのような型であるかによって、toml::getは異なる挙動をします。
|
||
Tの型の種類は、
|
||
変換が必要ない型 変換する必要がある型 に分けられます。
|
||
細かい条件と、特別にサポートしている具体的な型については後述します。
|
||
変換が必要ない型 # 変換が必要ないのは、渡された toml::value が格納している型です。 例えば、 toml::value::integer_type は std::int64_t のエイリアスなので、 toml::get<std::int64_t>(v) は変換を必要としません。 この場合、 toml:get は integer の値を toml::value から取り出し、その参照を返します。
|
||
渡されたtoml::valueが可変参照(&)である場合、返す値も可変参照(&)です。 不変参照(const&)の場合、返す値も不変参照(const&)となります。 可変参照を返した場合、その参照を通してtoml::valueに格納されている値に上書きできます。
|
||
変換が必要な型 # 上記の型以外については変換が必要です。 例えば、toml::value::integer_typeはstd::int64_tのエイリアスなので、toml::get<std::size_t>(toml::value&)は変換が必要です。 この場合、toml:getはintegerの値をtoml::valueから取り出し、それをキャストして返します。
|
||
toml11は簡単なキャストだけでなく、 toml::arrayからやstd::tuple<int, double, std::string>やstd::array<double, 4>、 toml::tableからstd::map<std::string, int>などの複雑な型変換をサポートします。 具体的には、続くセクションを参照してください。"><meta property="og:locale" content="ja"><meta property="og:type" content="article"><meta property="article:section" content="docs"><title>get.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/get/><link rel=alternate hreflang=en href=https://toruniina.github.io/toml11/docs/reference/get/ title=get.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/get/>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/>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/ class=active>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>get.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=#gethpp>get.hpp</a></li><li><a href=#tomlgett><code>toml::get<T></code></a><ul><li><a href=#概要>概要</a><ul><li><a href=#変換が必要ない型>変換が必要ない型</a></li><li><a href=#変換が必要な型>変換が必要な型</a></li><li><a href=#失敗した場合>失敗した場合</a></li></ul></li><li><a href=#tがtomlvalueと同一のとき><code>T</code>が<code>toml::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が異なるtypeconfigを持つbasic_valueothertcのとき><code>T</code>が異なる<code>TypeConfig</code>を持つ<code>basic_value<OtherTC></code>のとき</a></li><li><a href=#tが整数型の場合><code>T</code>が整数型の場合</a></li><li><a href=#tが浮動小数点数型の場合><code>T</code>が浮動小数点数型の場合</a></li><li><a href=#tがstdstring_viewの場合><code>T</code>が<code>std::string_view</code>の場合</a></li><li><a href=#tがstdchronodurationの場合><code>T</code>が<code>std::chrono::duration</code>の場合</a></li><li><a href=#tがstdchronosystem_clocktime_pointの場合><code>T</code>が<code>std::chrono::system_clock::time_point</code>の場合</a></li><li><a href=#tがarray-likeである場合><code>T</code>が<code>array-like</code>である場合</a></li><li><a href=#tがstdarrayである場合><code>T</code>が<code>std::array</code>である場合</a></li><li><a href=#tがstdforward_listである場合><code>T</code>が<code>std::forward_list</code>である場合</a></li><li><a href=#tがstdpairである場合><code>T</code>が<code>std::pair</code>である場合</a></li><li><a href=#tがstdtupleである場合><code>T</code>が<code>std::tuple</code>である場合</a></li><li><a href=#tがmap-likeである場合><code>T</code>が<code>map-like</code>である場合</a></li><li><a href=#tがtomlfromtの特殊化を持つユーザー定義型である場合><code>T</code>が<code>toml::from<T></code>の特殊化を持つユーザー定義型である場合</a></li><li><a href=#tがtfrom_tomlメンバ関数を持つユーザー定義型である場合><code>T</code>が<code>T::from_toml</code>メンバ関数を持つユーザー定義型である場合</a></li><li><a href=#tがtomlbasic_valuetcを取るコンストラクタを持つユーザー定義型である場合><code>T</code>が<code>toml::basic_value<TC></code>を取るコンストラクタを持つユーザー定義型である場合</a></li></ul></li><li><a href=#tomlget_ort><code>toml::get_or<T></code></a><ul><li><a href=#tがbasic_valuetcである場合><code>T</code>が<code>basic_value<TC></code>である場合</a></li><li><a href=#tがbasic_valuetcsome_typeである場合><code>T</code>が<code>basic_value<TC>::{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></ul></li><li><a href=#関連項目>関連項目</a></li></ul></nav></aside></header><article class="markdown book-article"><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<TC></code> が使われています。ただしこれでは冗長なので、
|
||
関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では <code>toml::value</code> と書きます。
|
||
説明文では、テンプレートパラメータ<code>TC</code>を変更して型が変更されていれば
|
||
<code>toml::value::integer_type</code> などの型は追従して変更されると解釈してください。</blockquote><h1 id=tomlgett><code>toml::get<T></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<int>(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><</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>T get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</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<std::int64_t>(v)</code> は変換を必要としません。
|
||
この場合、 <code>toml:get</code> は <code>integer</code> の値を <code>toml::value</code> から取り出し、その参照を返します。</p><p>渡された<code>toml::value</code>が可変参照(<code>&</code>)である場合、返す値も可変参照(<code>&</code>)です。
|
||
不変参照(<code>const&</code>)の場合、返す値も不変参照(<code>const&</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<std::size_t>(toml::value&)</code>は変換が必要です。
|
||
この場合、<code>toml:get</code>は<code>integer</code>の値を<code>toml::value</code>から取り出し、それをキャストして返します。</p><p>toml11は簡単なキャストだけでなく、
|
||
<code>toml::array</code>からや<code>std::tuple<int, double, std::string></code>や<code>std::array<double, 4></code>、
|
||
<code>toml::table</code>から<code>std::map<std::string, int></code>などの複雑な型変換をサポートします。
|
||
具体的には、続くセクションを参照してください。</p><h3 id=失敗した場合>失敗した場合
|
||
<a class=anchor href=#%e5%a4%b1%e6%95%97%e3%81%97%e3%81%9f%e5%a0%b4%e5%90%88>#</a></h3><p>期待した型変換を行えない場合があります。例えば、<code>table</code>を持っている<code>toml::value</code>に<code>toml::get<int>(v)</code>を適用した場合などです。</p><p>このような場合は、取り出そうとした型に最も似ている型への変換(今回は<code>int</code>なので、<code>as_integer</code>)が失敗したとして、<code>toml::type_error</code>が送出されます。</p><p>ファイルからパースした場合、以下のようなエラーメッセージが出力されます。</p><pre tabindex=0><code>terminate called after throwing an instance of 'toml::type_error'
|
||
what(): toml::value::as_integer(): bad_cast to integer
|
||
--> input.toml
|
||
|
|
||
6 | [fruit]
|
||
| ^^^^^^^-- the actual type is table
|
||
</code></pre><h2 id=tがtomlvalueと同一のとき><code>T</code>が<code>toml::value</code>と同一のとき
|
||
<a class=anchor href=#t%e3%81%8ctomlvalue%e3%81%a8%e5%90%8c%e4%b8%80%e3%81%ae%e3%81%a8%e3%81%8d>#</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> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T<span style=color:#f92672>&</span> get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</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>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</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>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same<T, basic_value<TC>></code> を満たす</li></ul><p><code>toml::value</code>から<code>toml::value</code>なので、変換は行われず、そのままの値が返されます。
|
||
他の関数の実装を一般化するためだけに存在しています。</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%ae%e3%81%84%e3%81%9a%e3%82%8c%e3%81%8b%e3%81%ae%e3%81%a8%e3%81%8d>#</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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T<span style=color:#f92672>&</span> get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</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>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</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>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>が<code>toml::value</code>が格納できる型(<code>toml::value::boolean_type</code>など)のどれかと同一であること</li></ul><p><code>toml::value</code> が格納している型と同じ型、例えば <code>toml::value::integer_type</code> が
|
||
<code>toml::get<T></code> の <code>T</code> として指定されたとき、型変換の必要がないため参照を返すことが可能です。</p><p>異なる型が格納されていた場合、<code>toml::type_error</code> が送出されます。</p><h2 id=tが異なるtypeconfigを持つbasic_valueothertcのとき><code>T</code>が異なる<code>TypeConfig</code>を持つ<code>basic_value<OtherTC></code>のとき
|
||
<a class=anchor href=#t%e3%81%8c%e7%95%b0%e3%81%aa%e3%82%8btypeconfig%e3%82%92%e6%8c%81%e3%81%a4basic_valueothertc%e3%81%ae%e3%81%a8%e3%81%8d>#</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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>が<code>toml::basic_value<TC></code>ではない</li><li><code>T</code>が<code>toml::basic_value<OtherTC></code>である</li></ul><p>異なる型を格納し得る<code>basic_value</code>が指定された場合、変換が行われます。</p><p>型変換が発生するので、返す値は新規な値であり、参照ではありません。</p><p>失敗しません(メモリ枯渇などの場合を除く)。</p><h2 id=tが整数型の場合><code>T</code>が整数型の場合
|
||
<a class=anchor href=#t%e3%81%8c%e6%95%b4%e6%95%b0%e5%9e%8b%e3%81%ae%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_integral<T></code> を満たす</li><li><code>std::is_same<T, bool></code> ではない</li><li><code>toml::value::integer_type</code> ではない</li></ul><p><code>toml::value</code> を <code>integer_type</code> を保持しているとしてその値を取得し、それを <code>T</code> に変換して返します。</p><p><code>toml::value::integer_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tが浮動小数点数型の場合><code>T</code>が浮動小数点数型の場合
|
||
<a class=anchor href=#t%e3%81%8c%e6%b5%ae%e5%8b%95%e5%b0%8f%e6%95%b0%e7%82%b9%e6%95%b0%e5%9e%8b%e3%81%ae%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_floating_point<T></code> を満たす</li><li><code>toml::value::floating_type</code> ではない</li></ul><p><code>toml::value</code>を<code>floating_type</code>を保持しているとしてその値を取得し、それを<code>T</code>に変換して返します。</p><p><code>toml::value::floating_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがstdstring_viewの場合><code>T</code>が<code>std::string_view</code>の場合
|
||
<a class=anchor href=#t%e3%81%8cstdstring_view%e3%81%ae%e5%a0%b4%e5%90%88>#</a></h2><p>C++17以降でのみ使用可能です。</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>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same<std::string_view, T></code> を満たす</li></ul><p><code>toml::value</code>を<code>string_type</code>を保持しているとしてその値を取得し、それから<code>std::string_view</code>を構築して返します。</p><p><code>toml::value::string_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがstdchronodurationの場合><code>T</code>が<code>std::chrono::duration</code>の場合
|
||
<a class=anchor href=#t%e3%81%8cstdchronoduration%e3%81%ae%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>が<code>std::chrono::duration<Rep, Period></code>である</li></ul><p><code>toml::value</code>を<code>local_time</code>を保持しているとしてその値を取得し、それを<code>std::chrono::duration</code>に変換して返します。</p><p><code>toml::value::local_time</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがstdchronosystem_clocktime_pointの場合><code>T</code>が<code>std::chrono::system_clock::time_point</code>の場合
|
||
<a class=anchor href=#t%e3%81%8cstdchronosystem_clocktime_point%e3%81%ae%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same<T, std::chrono::system_clock::time_point></code>を満たす</li></ul><p><code>toml::value</code> を <code>local_date</code>, <code>local_datetime</code>, <code>offset_datetime</code>のどれかを保持しているとしてその値を取得し、それを<code>std::chrono::system_clock::time_point</code>に変換して返します。</p><p><code>local_date</code>, <code>local_datetime</code>, <code>offset_datetime</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがarray-likeである場合><code>T</code>が<code>array-like</code>である場合
|
||
<a class=anchor href=#t%e3%81%8carray-like%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>T::iterator</code>を持つ</li><li><code>T</code>は<code>T::value_type</code>を持つ</li><li><code>T</code>は<code>T::push_back(x)</code>を持つ</li><li><code>T</code>は<code>toml::value::array_type</code>ではない</li><li><code>T</code>は<code>std::string</code>ではない</li><li><code>T</code>は<code>std::string_view</code>ではない</li><li><code>T</code>は<code>map-like</code>ではない</li><li><code>T</code>は<code>from_toml()</code>メンバ関数を持たない</li><li><code>toml::from<T></code>が定義されていない</li><li><code>toml::basic_value<TC></code>からのコンストラクタが定義されていない</li></ul><p><code>std::vector<int></code>や<code>std::deque<std::string></code>などが該当します。</p><p><code>toml::value</code>を<code>array</code>を保持しているとしてその値を取得し、それを指定されたコンテナに変換して返します。</p><p><code>toml::value::array_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがstdarrayである場合><code>T</code>が<code>std::array</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cstdarray%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>std::array<U, N></code>である</li></ul><p><code>toml::value</code>を<code>array</code>を保持しているとしてその値を取得し、それを指定されたコンテナに変換して返します。</p><p><code>toml::value::array_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><p><code>toml::value</code> が持つ <code>array</code> が十分な数の要素を持っていなかった場合、<code>std::out_of_range</code>が送出されます。</p><h2 id=tがstdforward_listである場合><code>T</code>が<code>std::forward_list</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cstdforward_list%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>std::forward_list<U></code>である</li></ul><p><code>toml::value</code>を<code>array</code>を保持しているとしてその値を取得し、それを<code>std::forward_list</code>に変換して返します。</p><p><code>toml::value::array_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><p><code>forward_list</code>は<code>push_back</code>を持たないので、別に実装されています。</p><h2 id=tがstdpairである場合><code>T</code>が<code>std::pair</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cstdpair%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>std::pair<T1, T2></code>である</li></ul><p><code>toml::value</code>を<code>array</code>を保持しているとしてその値を取得し、それを<code>std::pair<T1, T2></code>に変換して返します。</p><p><code>first</code> と <code>second</code> はそれぞれ再帰的に変換されます。</p><p><code>toml::value::array_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><p><code>toml::value</code> が持つ <code>array</code> の要素数がちょうど2個でなかった場合、<code>std::out_of_range</code>が送出されます。</p><h2 id=tがstdtupleである場合><code>T</code>が<code>std::tuple</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cstdtuple%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>std::tuple<T1, T2, ... TN></code>である</li></ul><p><code>toml::value</code>を<code>array</code>を保持しているとしてその値を取得し、それを<code>std::tuple<T1, T2, ...TN></code>に変換して返します。</p><p>各要素はそれぞれ再帰的に変換されます。</p><p><code>toml::value::array_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><p><code>toml::value</code> が持つ <code>array</code> の要素数がちょうど <code>std::tuple_size<T>::value</code> 個でなかった場合、<code>std::out_of_range</code>が送出されます。</p><h2 id=tがmap-likeである場合><code>T</code>が<code>map-like</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cmap-like%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code>は<code>T::iterator</code>を持つ</li><li><code>T</code>は<code>T::key_type</code>を持つ</li><li><code>T</code>は<code>T::value_type</code>を持つ</li><li><code>T</code>は<code>T::mapped_type</code>を持つ</li><li><code>T</code>は<code>toml::value::table_type</code>ではない</li><li><code>T</code>は<code>from_toml()</code>メンバ関数を持たない</li><li><code>toml::from<T></code>が定義されていない</li><li><code>toml::basic_value<TC></code>からのコンストラクタが定義されていない</li></ul><p><code>std::map<std::string, int></code>や<code>std::unordered_map<std::string, float></code>などが該当します。</p><p><code>toml::value</code>を<code>table</code>を保持しているとしてその値を取得し、それを <code>T</code> に変換して返します。</p><p>各要素はそれぞれ再帰的に変換されます。</p><p><code>basic_value::table_type</code> 以外の型が格納されていた場合、 <code>toml::type_error</code> が送出されます。</p><h2 id=tがtomlfromtの特殊化を持つユーザー定義型である場合><code>T</code>が<code>toml::from<T></code>の特殊化を持つユーザー定義型である場合
|
||
<a class=anchor href=#t%e3%81%8ctomlfromt%e3%81%ae%e7%89%b9%e6%ae%8a%e5%8c%96%e3%82%92%e6%8c%81%e3%81%a4%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e5%ae%9a%e7%be%a9%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from<T></code>が定義されている</li></ul><p><code>toml::from</code> の <code>T</code> に対する特殊化が定義されていた場合、それを使用した型変換が行われます。</p><p>個別にサポートされる型( <code>std::array</code>, <code>std::pair</code>, <code>std::tuple</code> )と衝突しないようにしてください。</p><h2 id=tがtfrom_tomlメンバ関数を持つユーザー定義型である場合><code>T</code>が<code>T::from_toml</code>メンバ関数を持つユーザー定義型である場合
|
||
<a class=anchor href=#t%e3%81%8ctfrom_toml%e3%83%a1%e3%83%b3%e3%83%90%e9%96%a2%e6%95%b0%e3%82%92%e6%8c%81%e3%81%a4%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e5%ae%9a%e7%be%a9%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from<T></code>が定義されていない</li><li><code>T</code>は<code>from_toml()</code>メンバ関数を持つ</li></ul><p><code>T</code> に <code>from_toml(toml::basic_value<TC>)</code> メンバ関数が定義されていた場合、それを使用した型変換が行われます。</p><p><code>toml::from<T></code> が定義されていると、そちらが優先されます。</p><h2 id=tがtomlbasic_valuetcを取るコンストラクタを持つユーザー定義型である場合><code>T</code>が<code>toml::basic_value<TC></code>を取るコンストラクタを持つユーザー定義型である場合
|
||
<a class=anchor href=#t%e3%81%8ctomlbasic_valuetc%e3%82%92%e5%8f%96%e3%82%8b%e3%82%b3%e3%83%b3%e3%82%b9%e3%83%88%e3%83%a9%e3%82%af%e3%82%bf%e3%82%92%e6%8c%81%e3%81%a4%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e5%ae%9a%e7%be%a9%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v);
|
||
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from<T></code>が定義されていない</li><li><code>T</code>は<code>from_toml()</code>メンバ関数を持たない</li><li><code>T</code>は<code>toml::basic_value<TC></code>を取るコンストラクタを持つ</li></ul><p><code>T</code> に <code>toml::basic_value<TC></code> を取るコンストラクタが定義されていた場合、それを使用した型変換が行われます。</p><p><code>toml::from<T></code> または <code>T::from_toml</code> が定義されていると、そちらが優先されます。</p><h1 id=tomlget_ort><code>toml::get_or<T></code>
|
||
<a class=anchor href=#tomlget_ort>#</a></h1><p><code>get_or</code> は失敗した際のためのデフォルト値を受け取ることで、失敗時に例外を投げないようにします。</p><p>このデフォルト値は受け取る型<code>T</code>と同じ型でなければなりません。
|
||
よって、 <code>toml::get<T></code> とは違って、 <code>get_or</code> では <code>T</code> を指定せずとも推論されます。</p><h2 id=tがbasic_valuetcである場合><code>T</code>が<code>basic_value<TC></code>である場合
|
||
<a class=anchor href=#t%e3%81%8cbasic_valuetc%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:#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> get_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> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> opt)
|
||
</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> <span style=color:#f92672>&</span> get_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> opt)
|
||
</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> get_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v, basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> opt)
|
||
</span></span></code></pre></div><p>変換先は同一の<code>toml::value</code>なので、失敗しません。</p><p>他の関数の実装を一般化するためだけに存在しています。</p><h2 id=tがbasic_valuetcsome_typeである場合><code>T</code>が<code>basic_value<TC>::{some_type}</code>である場合
|
||
<a class=anchor href=#t%e3%81%8cbasic_valuetcsome_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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&</span> get_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> 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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T <span style=color:#f92672>&</span> get_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, 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:#f92672>></span>
|
||
</span></span><span style=display:flex><span>T get_or(basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&&</span> v, T<span style=color:#f92672>&&</span> opt) <span style=color:#66d9ef>noexcept</span>
|
||
</span></span></code></pre></div><p><code>toml::get<T></code>と同様の変換を行います。失敗した場合は第二引数が返されます。</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:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>::</span>string_type
|
||
</span></span><span style=display:flex><span>get_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v,
|
||
</span></span><span style=display:flex><span> <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>string_type<span style=color:#f92672>::</span>value_type<span style=color:#f92672>*</span> opt);
|
||
</span></span></code></pre></div><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%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:#f92672>></span>
|
||
</span></span><span style=display:flex><span><span style=color:#66d9ef>typename</span> std<span style=color:#f92672>::</span>remove_cv<span style=color:#f92672><</span><span style=color:#66d9ef>typename</span> std<span style=color:#f92672>::</span>remove_reference<span style=color:#f92672><</span>T<span style=color:#f92672>>::</span>type<span style=color:#f92672>>::</span>type
|
||
</span></span><span style=display:flex><span>get_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672><</span>TC<span style=color:#f92672>>&</span> v, T<span style=color:#f92672>&&</span> opt);
|
||
</span></span></code></pre></div><p><code>toml::get<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/find/>find.hpp</a></li><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/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=#gethpp>get.hpp</a></li><li><a href=#tomlgett><code>toml::get<T></code></a><ul><li><a href=#概要>概要</a><ul><li><a href=#変換が必要ない型>変換が必要ない型</a></li><li><a href=#変換が必要な型>変換が必要な型</a></li><li><a href=#失敗した場合>失敗した場合</a></li></ul></li><li><a href=#tがtomlvalueと同一のとき><code>T</code>が<code>toml::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が異なるtypeconfigを持つbasic_valueothertcのとき><code>T</code>が異なる<code>TypeConfig</code>を持つ<code>basic_value<OtherTC></code>のとき</a></li><li><a href=#tが整数型の場合><code>T</code>が整数型の場合</a></li><li><a href=#tが浮動小数点数型の場合><code>T</code>が浮動小数点数型の場合</a></li><li><a href=#tがstdstring_viewの場合><code>T</code>が<code>std::string_view</code>の場合</a></li><li><a href=#tがstdchronodurationの場合><code>T</code>が<code>std::chrono::duration</code>の場合</a></li><li><a href=#tがstdchronosystem_clocktime_pointの場合><code>T</code>が<code>std::chrono::system_clock::time_point</code>の場合</a></li><li><a href=#tがarray-likeである場合><code>T</code>が<code>array-like</code>である場合</a></li><li><a href=#tがstdarrayである場合><code>T</code>が<code>std::array</code>である場合</a></li><li><a href=#tがstdforward_listである場合><code>T</code>が<code>std::forward_list</code>である場合</a></li><li><a href=#tがstdpairである場合><code>T</code>が<code>std::pair</code>である場合</a></li><li><a href=#tがstdtupleである場合><code>T</code>が<code>std::tuple</code>である場合</a></li><li><a href=#tがmap-likeである場合><code>T</code>が<code>map-like</code>である場合</a></li><li><a href=#tがtomlfromtの特殊化を持つユーザー定義型である場合><code>T</code>が<code>toml::from<T></code>の特殊化を持つユーザー定義型である場合</a></li><li><a href=#tがtfrom_tomlメンバ関数を持つユーザー定義型である場合><code>T</code>が<code>T::from_toml</code>メンバ関数を持つユーザー定義型である場合</a></li><li><a href=#tがtomlbasic_valuetcを取るコンストラクタを持つユーザー定義型である場合><code>T</code>が<code>toml::basic_value<TC></code>を取るコンストラクタを持つユーザー定義型である場合</a></li></ul></li><li><a href=#tomlget_ort><code>toml::get_or<T></code></a><ul><li><a href=#tがbasic_valuetcである場合><code>T</code>が<code>basic_value<TC></code>である場合</a></li><li><a href=#tがbasic_valuetcsome_typeである場合><code>T</code>が<code>basic_value<TC>::{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></ul></li><li><a href=#関連項目>関連項目</a></li></ul></nav></div></aside></main></body></html> |