77 lines
5.6 KiB
HTML
77 lines
5.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::projected</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_iterator_projected skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>projected</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-iterator.html">iterator</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-iterator.html"><iterator></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">indirectly_readable</span> I,<br /></span>
|
|
<p> std<span class="sy4">::</span><span class="me2">indirectly_regular_unary_invocable</span><span class="sy1"><</span>I<span class="sy1">></span> Proj <span class="sy1">></span><br />
|
|
<span class="kw1">struct</span> projected <span class="br0">{</span><br />
|
|
<span class="kw1">using</span> value_type <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">remove_cvref_t</span><span class="sy1"><</span>std<span class="sy4">::</span><span class="me2">indirect_result_t</span><span class="sy1"><</span>Proj<span class="sy3">&</span>, I<span class="sy1">>></span><span class="sy4">;</span><br />
|
|
std<span class="sy4">::</span><span class="me2">indirect_result_t</span><span class="sy1"><</span>Proj<span class="sy3">&</span>, I<span class="sy1">></span> operator<span class="sy2">*</span><span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span> <span class="co1">// 不定义</span><br /></p>
|
|
<span class="br0">}</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx20">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1"><</span> std<span class="sy4">::</span><span class="me2">weakly_incrementable</span> I, <span class="kw1">class</span> Proj <span class="sy1">></span><br /></span>
|
|
<p><span class="kw1">struct</span> incrementable_traits<span class="sy1"><</span>std<span class="sy4">::</span><span class="me2">projected</span><span class="sy1"><</span>I, Proj<span class="sy1">>></span> <span class="br0">{</span><br />
|
|
<span class="kw1">using</span> difference_type <span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">iter_difference_t</span><span class="sy1"><</span>I<span class="sy1">></span><span class="sy4">;</span><br /></p>
|
|
<span class="br0">}</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 类模板 <code>projected</code> 组合 <a href="cpp-iterator-indirectly_readable.html"><code>indirectly_readable</code></a> 类型 <code>I</code> 与可调用对象类型 <code>Proj</code> 到新的 <code>indirectly_readable</code> 类型中,其引用类型是应用 <code>Proj</code> 到 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">iter_reference_t</span><span class="sy1"><</span>I<span class="sy1">></span></span></span> 的结果。</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> <span class="t-lc">std::incrementable_traits</span> 的此特化使 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">projected</span><span class="sy1"><</span>I, Proj<span class="sy1">></span></span></span> 在 <code>I</code> 为 <a href="cpp-iterator-weakly_incrementable.html"><code>weakly_incrementable</code></a> 类型时亦为 <code>weakly_incrementable</code> 类型。</div>
|
|
<p><code>projected</code> 仅用于制约接受可调用对象与投影的算法,从而其 <code>operator*()</code> 不被定义。</p>
|
|
<h3><span class="mw-headline" id=".E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">模板形参</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>I</td>
|
|
<td>-</td>
|
|
<td>间接可读类型</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>Proj</td>
|
|
<td>-</td>
|
|
<td>应用到解引用的 <code>I</code> 的投影</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|