<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Static on Frank Bi</title><link>https://wentaobi.github.io/biwentao/tags/static/</link><description>Recent content in Static on Frank Bi</description><image><url>https://wentaobi.github.io/biwentao/images/forge-v2-compat.svg</url><link>https://wentaobi.github.io/biwentao/images/forge-v2-compat.svg</link></image><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 19 Feb 2014 00:00:00 +0000</lastBuildDate><atom:link href="https://wentaobi.github.io/biwentao/tags/static/feed.xml" rel="self" type="application/rss+xml"/><item><title>Modern C++ 100 Questions | 04 Class template different types of instantiation</title><link>https://wentaobi.github.io/biwentao/study/04_class_template_different_types_of_instantiation/</link><pubDate>Wed, 19 Feb 2014 00:00:00 +0000</pubDate><guid>https://wentaobi.github.io/biwentao/study/04_class_template_different_types_of_instantiation/</guid><description>Implement pipe operator</description><content:encoded><![CDATA[<p>This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.</p>
<h2 id="04-class-template-different-types-of-instantiation"><code>04</code> Class template different types of instantiation</h2>
<p><strong>Requirements</strong>：</p>
<ol>
<li>Please don&rsquo;t change <code>main</code> function.</li>
<li>Please implement your function/code to get <strong>Expected results</strong>.</li>
</ol>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="cp">#include&lt;iostream&gt;
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="k">class</span> <span class="nc">ComponentBase</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="k">protected</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">    <span class="k">static</span> <span class="kr">inline</span> <span class="n">std</span><span class="o">::</span><span class="n">size_t</span> <span class="n">component_type_count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="k">template</span><span class="o">&lt;</span><span class="k">typename</span> <span class="n">T</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Component</span> <span class="o">:</span> <span class="k">public</span> <span class="n">ComponentBase</span><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="k">public</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// todo...
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="c1">// Change the current template class in any way so that for any type X, if it inherits from Component
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl">    <span class="c1">// Then X::component type id() will get a unique id of type size t (different values should be returned for different X types)值应不同）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="c1">// Requirements: std::type info cannot be used (the typeid keyword is disabled), and all ids are consecutive starting from 0
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">};</span>
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">A</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Component</span><span class="o">&lt;</span><span class="n">A</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">{};</span>
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">B</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Component</span><span class="o">&lt;</span><span class="n">B</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">{};</span>
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">C</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Component</span><span class="o">&lt;</span><span class="n">C</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">{};</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">A</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">B</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">B</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">A</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">A</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">C</span><span class="o">::</span><span class="n">component_type_id</span><span class="p">()</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="expected-results">Expected results</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">0
</span></span><span class="line"><span class="cl">1
</span></span><span class="line"><span class="cl">1
</span></span><span class="line"><span class="cl">0
</span></span><span class="line"><span class="cl">0
</span></span><span class="line"><span class="cl">2
</span></span></code></pre></div><h3 id="suggested-environments">Suggested environments</h3>
<p><a href="https://godbolt.org/">Compiler explorer</a>, please add <strong>&ndash;std=c++20</strong> to the compilation options.</p>
<h3 id="my-implementation">My implementation</h3>
<p><a href="https://zhuanlan.zhihu.com/p/681510902">Reference code</a>, please use browser to translate page from Chinese to English if necessary.</p>]]></content:encoded></item></channel></rss>