Skip to content

Commit 3b36121

Browse files
Preview PR 1607: f5752c3c8f0f3f
1 parent d034269 commit 3b36121

111 files changed

Lines changed: 28446 additions & 236 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

gen/pull/1607/PREVIEW.md

Lines changed: 71 additions & 3 deletions
Large diffs are not rendered by default.

gen/pull/1607/lang/cpp26/reflection.html

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2026-04-09T06:13:07">
192-
2026年04月09日 06時13分07秒
191+
<span itemprop="datePublished" content="2026-04-09T07:48:07">
192+
2026年04月09日 07時48分07秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -318,6 +318,27 @@ <h2>リフレクション演算子<code>^^</code></h2>
318318
</tr>
319319
</tbody>
320320
</table>
321+
<h3><a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>された関数のリフレクション</h3>
322+
<p><code>^^f</code>で関数<code>f</code>をリフレクションする場合、<code>f</code><a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>されていると<a class="cpprefjp-defined-word" data-desc="プログラムが適格でないこと。コンパイルエラーなどになる" href="../../implementation-compliance.html#dfn-ill-formed">不適格</a>となる。<code>^^</code><a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>集合ではなく単一の関数を対象とする。</p>
323+
<p><div class="codehilite"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="kt">int</span><span class="p">);</span>
324+
<span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="kt">double</span><span class="p">);</span>
325+
326+
<span class="c1">// constexpr auto r = ^^f; // エラー: fはオーバーロードされている</span>
327+
</code></pre></div>
328+
</p>
329+
<p><a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>された関数の個々の<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>を取得するには、<code><a href="../../reference/meta/members_of.html">members_of()</a></code>を使用する。<code>members_of()</code>は各<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>を個別のリフレクションとして返す。</p>
330+
<p><div class="codehilite"><pre><span></span><code><span class="k">struct</span><span class="w"> </span><span class="nc">S</span><span class="w"> </span><span class="p">{</span>
331+
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="kt">int</span><span class="p">);</span>
332+
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="kt">double</span><span class="p">);</span>
333+
<span class="p">};</span>
334+
335+
<span class="c1">// members_of()で個々のオーバーロードを取得</span>
336+
<span class="k">constexpr</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">members</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><a href="../../reference/meta/members_of.html">std::meta::members_of</a></span><span class="p">(</span>
337+
<span class="w"> </span><span class="o">^^</span><span class="n">S</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/meta/access_context.html">std::meta::access_context</a></span><span class="o">::</span><span class="n"><a href="../../reference/meta/access_context/unchecked.html">unchecked</a></span><span class="p">());</span>
338+
<span class="c1">// フィルタリングで特定のオーバーロードを選択できる</span>
339+
</code></pre></div>
340+
</p>
341+
<p>また、スプライスで関数のリフレクションを式に変換する場合、<a class="cpprefjp-defined-word" data-desc="関数呼び出し時に、同名の関数の中から実際に呼び出す関数を決定する処理。このときの候補になることを、オーバーロード解決に参加するという">オーバーロード解決</a>は行われず、そのリフレクションが表す特定の関数が直接使用される。</p>
321342
<h2>スプライス演算子<code>[: :]</code></h2>
322343
<p>スプライス演算子は、<code><a href="../../reference/meta/info.html">std::meta::info</a></code>型の値(リフレクション)を受け取り、それが表すプログラム要素(型、式、テンプレート、名前空間)に変換して挿入する。<code>[:</code><code>:]</code>の間には<code>std::meta::info</code>型に評価される式を記述する。</p>
323344
<p><div class="codehilite"><pre><span></span><code><span class="c1">// 型スプライス:リフレクションが表す型を挿入する</span>

0 commit comments

Comments
 (0)