Files
toml11/ja/docs/reference/get/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

196 lines
56 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="
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&lt;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&lt;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&lt;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&lt;TC></code>を取るコンストラクタを持つユーザー定義型である場合</a></li></ul></li><li><a href=#tomlget_ort><code>toml::get_or&lt;T></code></a><ul><li><a href=#tがbasic_valuetcである場合><code>T</code><code>basic_value&lt;TC></code>である場合</a></li><li><a href=#tがbasic_valuetcsome_typeである場合><code>T</code><code>basic_value&lt;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&lt;TC></code> が使われています。ただしこれでは冗長なので、
関数の宣言と特に区別しなければならない場合を除いて、簡単のため説明文では <code>toml::value</code> と書きます。
説明文では、テンプレートパラメータ<code>TC</code>を変更して型が変更されていれば
<code>toml::value::integer_type</code> などの型は追従して変更されると解釈してください。</blockquote><h1 id=tomlgett><code>toml::get&lt;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&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>ただし、<code>T</code>がどのような型であるかによって、<code>toml::get</code>は異なる挙動をします。</p><p><code>T</code>の型の種類は、</p><ol><li>変換が必要ない型</li><li>変換する必要がある型</li></ol><p>に分けられます。</p><p>細かい条件と、特別にサポートしている具体的な型については後述します。</p><h3 id=変換が必要ない型>変換が必要ない型
<a class=anchor href=#%e5%a4%89%e6%8f%9b%e3%81%8c%e5%bf%85%e8%a6%81%e3%81%aa%e3%81%84%e5%9e%8b>#</a></h3><p>変換が必要ないのは、渡された <code>toml::value</code> が格納している型です。
例えば、 <code>toml::value::integer_type</code><code>std::int64_t</code> のエイリアスなので、
<code>toml::get&lt;std::int64_t>(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&lt;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&lt;int, double, std::string></code><code>std::array&lt;double, 4></code>
<code>toml::table</code>から<code>std::map&lt;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&lt;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 &#39;toml::type_error&#39;
what(): toml::value::as_integer(): bad_cast to integer
--&gt; 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>&lt;</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T<span style=color:#f92672>&amp;</span> get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span><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>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same&lt;T, basic_value&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T<span style=color:#f92672>&amp;</span> get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>template</span><span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> get(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span><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>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</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&lt;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&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>toml::basic_value&lt;TC></code>ではない</li><li><code>T</code><code>toml::basic_value&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_integral&lt;T></code> を満たす</li><li><code>std::is_same&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_floating_point&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>std::chrono::duration&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>std::is_same&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</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&lt;T></code>が定義されていない</li><li><code>toml::basic_value&lt;TC></code>からのコンストラクタが定義されていない</li></ul><p><code>std::vector&lt;int></code><code>std::deque&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>std::array&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>std::forward_list&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>std::pair&lt;T1, T2></code>である</li></ul><p><code>toml::value</code><code>array</code>を保持しているとしてその値を取得し、それを<code>std::pair&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>T</code><code>std::tuple&lt;T1, T2, ... TN></code>である</li></ul><p><code>toml::value</code><code>array</code>を保持しているとしてその値を取得し、それを<code>std::tuple&lt;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&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</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&lt;T></code>が定義されていない</li><li><code>toml::basic_value&lt;TC></code>からのコンストラクタが定義されていない</li></ul><p><code>std::map&lt;std::string, int></code><code>std::unordered_map&lt;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&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from&lt;T></code>が定義されていない</li><li><code>T</code><code>from_toml()</code>メンバ関数を持つ</li></ul><p><code>T</code><code>from_toml(toml::basic_value&lt;TC>)</code> メンバ関数が定義されていた場合、それを使用した型変換が行われます。</p><p><code>toml::from&lt;T></code> が定義されていると、そちらが優先されます。</p><h2 id=tがtomlbasic_valuetcを取るコンストラクタを持つユーザー定義型である場合><code>T</code><code>toml::basic_value&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v);
</span></span></code></pre></div><p>条件:</p><ul><li><code>toml::from&lt;T></code>が定義されていない</li><li><code>T</code><code>from_toml()</code>メンバ関数を持たない</li><li><code>T</code><code>toml::basic_value&lt;TC></code>を取るコンストラクタを持つ</li></ul><p><code>T</code><code>toml::basic_value&lt;TC></code> を取るコンストラクタが定義されていた場合、それを使用した型変換が行われます。</p><p><code>toml::from&lt;T></code> または <code>T::from_toml</code> が定義されていると、そちらが優先されます。</p><h1 id=tomlget_ort><code>toml::get_or&lt;T></code>
<a class=anchor href=#tomlget_ort>#</a></h1><p><code>get_or</code> は失敗した際のためのデフォルト値を受け取ることで、失敗時に例外を投げないようにします。</p><p>このデフォルト値は受け取る型<code>T</code>と同じ型でなければなりません。
よって、 <code>toml::get&lt;T></code> とは違って、 <code>get_or</code> では <code>T</code> を指定せずとも推論されます。</p><h2 id=tがbasic_valuetcである場合><code>T</code><code>basic_value&lt;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>&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> get_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> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</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>&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:#f92672>&amp;</span> get_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</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>&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> get_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</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&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> T, <span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T <span style=color:#66d9ef>const</span><span style=color:#f92672>&amp;</span> get_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> 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:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T <span style=color:#f92672>&amp;</span> get_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, 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:#f92672>&gt;</span>
</span></span><span style=display:flex><span>T get_or(basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;&amp;</span> v, T<span style=color:#f92672>&amp;&amp;</span> opt) <span style=color:#66d9ef>noexcept</span>
</span></span></code></pre></div><p><code>toml::get&lt;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>&lt;</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>typename</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;::</span>string_type
</span></span><span style=display:flex><span>get_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></span><span style=display:flex><span> <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>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>&lt;</span><span style=color:#66d9ef>typename</span> TC<span style=color:#f92672>&gt;</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>typename</span> std<span style=color:#f92672>::</span>remove_cv<span style=color:#f92672>&lt;</span><span style=color:#66d9ef>typename</span> std<span style=color:#f92672>::</span>remove_reference<span style=color:#f92672>&lt;</span>T<span style=color:#f92672>&gt;::</span>type<span style=color:#f92672>&gt;::</span>type
</span></span><span style=display:flex><span>get_or(<span style=color:#66d9ef>const</span> basic_value<span style=color:#f92672>&lt;</span>TC<span style=color:#f92672>&gt;&amp;</span> v, T<span style=color:#f92672>&amp;&amp;</span> opt);
</span></span></code></pre></div><p><code>toml::get&lt;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&lt;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&lt;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&lt;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&lt;TC></code>を取るコンストラクタを持つユーザー定義型である場合</a></li></ul></li><li><a href=#tomlget_ort><code>toml::get_or&lt;T></code></a><ul><li><a href=#tがbasic_valuetcである場合><code>T</code><code>basic_value&lt;TC></code>である場合</a></li><li><a href=#tがbasic_valuetcsome_typeである場合><code>T</code><code>basic_value&lt;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>