forked from mpusz/mp-units
20 lines
14 KiB
HTML
20 lines
14 KiB
HTML
<!DOCTYPE html><html lang='en'><head><title>[qty.like]</title><meta charset='UTF-8'/><link rel='stylesheet' type='text/css' href='14882.css'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Serif'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans'/><link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css2?family=Noto+Sans+Mono'/><link rel='icon' href='icon.png'/><link rel='stylesheet' type='text/css' href='expanded.css' title='Normal'/><link rel='alternate stylesheet' type='text/css' href='colored.css' title='Notes and examples colored'/><link rel='alternate stylesheet' type='text/css' href='normative-only.css' title='Notes and examples hidden'/></head><body><div class='wrapper'><h1 ><a class='secnum' style='min-width:50pt'>5</a> Quantities and units library <a class='abbr_ref' href='index.html#quantities'>[quantities]</a></h1><h2 ><a class='secnum' style='min-width:65pt'>5.6</a> Quantity <a class='abbr_ref' href='qty.html#like'>[qty]</a></h2><h3 ><a class='secnum' style='min-width:80pt'>5.6.2</a> Interoperability <a class='abbr_ref'>[qty.like]</a></h3><div class='para' id='1'><div class='marginalizedparent'><a class='marginalized' href='#1'>1</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4070'>#</a></div><div class='texpara'><div id='1.sentence-1' class='sentence'>The interfaces specified in this subclause and subclause <a href='qty.pt.like.html' title='5.7.3 Interoperability'>[qty.<span class='shy'></span>pt.<span class='shy'></span>like]</a>
|
|
are used by <span class='texttt'>quantity</span> and <span class='texttt'>quantity_<span class='shy'></span>point</span>
|
|
to specify conversions with other types representing quantities<a class='hidden_link' href='#1.sentence-1'>.</a></div> <div id='note-1' class='note'><div class='texpara'>[<i>Note <a href='#note-1'>1</a></i>: <div id='1.sentence-2' class='sentence'><a href='qty.chrono.html' title='5.9 std​::​chrono interoperability'>[qty.<span class='shy'></span>chrono]</a> implements them for <span class='texttt'>std<span class='operator'>​::​</span>chrono<span class='operator'>​::​</span>duration</span> and <span class='texttt'>std<span class='operator'>​::​</span>chrono<span class='operator'>​::​</span>time_<span class='shy'></span>point</span><a class='hidden_link' href='#1.sentence-2'>.</a></div> — <i>end note</i>]</div></div></div></div><div class='texpara'><div class='itemdecl' id='itemdecl:1'><div class='marginalizedparent'><a class='itemDeclLink' href='#itemdecl:1'>🔗</a></div><code class='itemdeclcode'><span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T, <span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span><span class='anglebracket'>></span> <span class='keyword'>typename</span> Traits<span class='anglebracket'>></span>
|
|
<span class='keyword'>concept</span> <span class='texttt'><i >qty-like-impl</i></span><a class='index' id='concept:qty-like-impl'></a> <span class='operator'>=</span> <span class='keyword'>requires</span><span class='parenthesis'>(</span><span class='keyword'>const</span> T<span class='operator'>&</span> qty, <span class='keyword'>const</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='operator'>&</span> num<span class='parenthesis'>)</span> <span class='curlybracket'>{</span> <span class='comment'>// <i >exposition only</i></span>
|
|
<span class='curlybracket'>{</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>to_numerical_value<span class='parenthesis'>(</span>qty<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>typename</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></span>;
|
|
<span class='curlybracket'>{</span> Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>from_numerical_value<span class='parenthesis'>(</span>num<span class='parenthesis'>)</span> <span class='curlybracket'>}</span> <span class='operator'>-</span><span class='anglebracket'>></span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span>T<span class='anglebracket'>></span>;
|
|
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_import<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>></span>;
|
|
<span class='keyword'>requires</span> std<span class='operator'>::</span>same_as<span class='anglebracket'><</span><span class='keyword'>decltype</span><span class='parenthesis'>(</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_export<span class='parenthesis'>)</span>, <span class='keyword'>const</span> <span class='keyword'>bool</span><span class='anglebracket'>></span>;
|
|
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'><</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_import<span class='anglebracket'>></span>;
|
|
<span class='keyword'>typename</span> std<span class='operator'>::</span>bool_constant<span class='anglebracket'><</span>Traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>explicit_export<span class='anglebracket'>></span>;
|
|
<span class='curlybracket'>}</span>;
|
|
|
|
<span class='keyword'>template</span><span class='anglebracket'><</span><span class='keyword'>typename</span> T<span class='anglebracket'>></span>
|
|
<span class='keyword'>concept</span> <a class='hidden_link' href='#concept:QuantityLike' title='5.6.2 Interoperability [qty.like]'><span id='concept:QuantityLike'><span id='lib:QuantityLike'><span class='texttt'>QuantityLike</span></span></span></a> <span class='operator'>=</span> <span class='operator'>!</span><a href='qty.syn.html#concept:Quantity' title='5.6.3 Class template quantity [qty.syn]'><span id='conceptref:Quantity'><span class='texttt'>Quantity</span></span></a><span class='anglebracket'><</span>T<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <a class='index' id='conceptref:qty-like-impl'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'><</span>T, quantity_like_traits<span class='anglebracket'>></span> <span class='operator'>&</span><span class='operator'>&</span> <span class='keyword'>requires</span> <span class='curlybracket'>{</span>
|
|
<span class='keyword'>typename</span> quantity<span class='anglebracket'><</span>quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>reference, <span class='keyword'>typename</span> quantity_like_traits<span class='anglebracket'><</span>T<span class='anglebracket'>></span><span class='operator'>::</span>rep<span class='anglebracket'>></span>;
|
|
<span class='curlybracket'>}</span>;
|
|
</code></div></div><div class='para' id='2'><div class='marginalizedparent'><a class='marginalized' href='#2'>2</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4095'>#</a></div><div class='texpara'><div id='2.sentence-1' class='sentence'>In the following descriptions, let
|
|
<ul class='itemize'><li id='2.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#2.1'>(2.1)</a></div><span class='texttt'>Traits</span> be <span class='texttt'>quantity_<span class='shy'></span>like_<span class='shy'></span>traits</span> or <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits</span>,</li><li id='2.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#2.2'>(2.2)</a></div><span class='texttt'>Q</span> be a type for which <span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span></span> is specialized,</li><li id='2.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#2.3'>(2.3)</a></div><span class='texttt'>qty</span> be an lvalue of type <span class='texttt'><span class='keyword'>const</span> Q</span>, and</li><li id='2.4'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#2.4'>(2.4)</a></div><span class='texttt'>num</span> be an lvalue of type <span class='texttt'><span class='keyword'>const</span> Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>rep</span><a class='hidden_link' href='#2.sentence-1'>.</a></li></ul></div></div></div><div class='para' id='3'><div class='marginalizedparent'><a class='marginalized' href='#3'>3</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4108'>#</a></div><div class='texpara'><div id='3.sentence-1' class='sentence'><span class='texttt'>Q</span> models <span class='texttt'><a class='index' id='conceptref:qty-like-impl_'></a><span class='texttt'><i >qty-like-impl</i></span><span class='anglebracket'><</span>Traits<span class='anglebracket'>></span></span> if and only if:
|
|
<ul class='itemize'><li id='3.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#3.1'>(3.1)</a></div><div class='texpara'><div id='3.1.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>to_<span class='shy'></span>numerical_<span class='shy'></span>value<span class='parenthesis'>(</span>qty<span class='parenthesis'>)</span></span> returns the numerical value (<a href="https://www.electropedia.org/iev/iev.nsf/display?openform&ievref=112-01-29">IEC 60050, 112-01-29</a>) of <span class='texttt'>qty</span><a class='hidden_link' href='#3.1.sentence-1'>.</a></div></div></li><li id='3.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#3.2'>(3.2)</a></div><div class='texpara'><div id='3.2.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>from_<span class='shy'></span>numerical_<span class='shy'></span>value<span class='parenthesis'>(</span>num<span class='parenthesis'>)</span></span> returns a <span class='texttt'>Q</span> with numerical value <span class='texttt'>num</span><a class='hidden_link' href='#3.2.sentence-1'>.</a></div></div></li><li id='3.3'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#3.3'>(3.3)</a></div><div class='texpara'><div id='3.3.sentence-1' class='sentence'>If <span class='texttt'>Traits</span> is <span class='texttt'>quantity_<span class='shy'></span>point_<span class='shy'></span>like_<span class='shy'></span>traits</span>,
|
|
both numerical values are offset from <span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>point_<span class='shy'></span>origin</span><a class='hidden_link' href='#3.3.sentence-1'>.</a></div></div></li></ul></div></div></div><div class='para' id='4'><div class='marginalizedparent'><a class='marginalized' href='#4'>4</a></div><div class='sourceLinkParent'><a class='sourceLink' href='https://github.com/mpusz/mp-unitse9c5f7236ebfe1b287a5a4a49aaf57fbefa87233/source/quantities.tex#L4120'>#</a></div><div class='texpara'><div id='4.sentence-1' class='sentence'>If the following expression is <span class='texttt'><span class='literal'>true</span></span>, the specified conversion will be explicit<a class='hidden_link' href='#4.sentence-1'>.</a></div> <ul class='itemize'><li id='4.1'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#4.1'>(4.1)</a></div><div class='texpara'><div id='4.1.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>explicit_<span class='shy'></span>import</span> for the conversion from <span class='texttt'>Q</span> to this library's type<a class='hidden_link' href='#4.1.sentence-1'>.</a></div></div></li><li id='4.2'><div class='marginalizedparent' style='left:-27mm'><a class='marginalized' href='#4.2'>(4.2)</a></div><div class='texpara'><div id='4.2.sentence-1' class='sentence'><span class='texttt'>Traits<span class='anglebracket'><</span>Q<span class='anglebracket'>></span><span class='operator'>​::​</span>explicit_<span class='shy'></span>export</span> for the conversion from this library's type to <span class='texttt'>Q</span><a class='hidden_link' href='#4.2.sentence-1'>.</a></div></div></li></ul></div></div></div></body></html> |