{"id":192,"date":"2007-10-18T01:38:00","date_gmt":"2007-10-18T06:38:00","guid":{"rendered":"http:\/\/wangxiaohu.com\/blog\/?p=192"},"modified":"2007-10-18T01:38:00","modified_gmt":"2007-10-18T06:38:00","slug":"use-base-class-iterator-in-a-derived-class-with-a-template","status":"publish","type":"post","link":"https:\/\/wangxiaohu.com\/blog\/?p=192","title":{"rendered":"Use base class iterator in a derived class with a template"},"content":{"rendered":"<p>To tell the truth, I am still a newbie in C++. So I decided to take a evening and do a quick exercise. What I am trying to do is to write a class which uses the iterator from its &#8216;parent&#8217; class:<\/p>\n<div class=\"csharpcode\">\n<pre><span class=\"lnum\"> 1: <\/span>#include &lt;vector&gt;<\/pre>\n<pre><span class=\"lnum\"> 2: <\/span>#include &lt;iostream&gt;<\/pre>\n<pre><span class=\"lnum\"> 3: <\/span>&#xA0;<\/pre>\n<pre><span class=\"lnum\"> 4: <\/span>template &lt;typename T&gt;<\/pre>\n<pre><span class=\"lnum\"> 5: <\/span><span class=\"kwrd\">class<\/span> myVector : <span class=\"kwrd\">public<\/span> std::vector&lt;T&gt;<\/pre>\n<pre><span class=\"lnum\"> 6: <\/span>{<\/pre>\n<pre><span class=\"lnum\"> 7: <\/span><span class=\"kwrd\">public<\/span>:<\/pre>\n<pre><span class=\"lnum\"> 8: <\/span> <span class=\"kwrd\">void<\/span> Test();<\/pre>\n<pre><span class=\"lnum\"> 9: <\/span>};<\/pre>\n<pre><span class=\"lnum\"> 10: <\/span>&#xA0;<\/pre>\n<pre><span class=\"lnum\"> 11: <\/span>template &lt;typename T&gt;<\/pre>\n<pre><span class=\"lnum\"> 12: <\/span><span class=\"kwrd\">void<\/span> myVector&lt;T&gt;::Test()<\/pre>\n<pre><span class=\"lnum\"> 13: <\/span>{<\/pre>\n<pre><span class=\"lnum\"> 14: <\/span> <font color=\"#ff0000\">typename<\/font> std::vector&lt;T&gt;::iterator i;<\/pre>\n<pre><span class=\"lnum\"> 15: <\/span>&#xA0;<\/pre>\n<pre><span class=\"lnum\"> 16: <\/span> <span class=\"kwrd\">for<\/span> (i = <span class=\"kwrd\">this<\/span>-&gt;begin(); i != <span class=\"kwrd\">this<\/span>-&gt;end(); i++)<\/pre>\n<pre><span class=\"lnum\"> 17: <\/span> std::cout &lt;&lt; *i &lt;&lt; std::endl;<\/pre>\n<pre><span class=\"lnum\"> 18: <\/span>&#xA0;<\/pre>\n<pre><span class=\"lnum\"> 19: <\/span> <span class=\"kwrd\">return<\/span>;<\/pre>\n<pre><span class=\"lnum\"> 20: <\/span>}<\/pre>\n<pre><span class=\"lnum\"> 21: <\/span>&#xA0;<\/pre>\n<pre><span class=\"lnum\"> 22: <\/span><span class=\"kwrd\">int<\/span> main()<\/pre>\n<pre><span class=\"lnum\"> 23: <\/span>{<\/pre>\n<pre><span class=\"lnum\"> 24: <\/span> myVector&lt;<span class=\"kwrd\">int<\/span>&gt; v;<\/pre>\n<pre><span class=\"lnum\"> 25: <\/span> v.push_back(1);<\/pre>\n<pre><span class=\"lnum\"> 26: <\/span> v.push_back(2);<\/pre>\n<pre><span class=\"lnum\"> 27: <\/span> v.push_back(3);<\/pre>\n<pre><span class=\"lnum\"> 28: <\/span> v.push_back(4);<\/pre>\n<pre><span class=\"lnum\"> 29: <\/span> v.Test();<\/pre>\n<pre><span class=\"lnum\"> 30: <\/span> <span class=\"kwrd\">return<\/span> 0;<\/pre>\n<pre><span class=\"lnum\"> 31: <\/span>}<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<div class=\"csharpcode\">&#xA0;<\/div>\n<p>The whole point here is the <strong>typename<\/strong> in line 14. That is the tricky part which took me a while to figure out. Without it the code won&#8217;t even compile. Now I can add all different kinds of sorting methods to <strong>myVector<\/strong>. Yes, I know it&#8217;s a bad idea. Just code for fun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To tell the truth, I am still a newbie in C++. So I dec &hellip; <a href=\"https:\/\/wangxiaohu.com\/blog\/?p=192\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">Use base class iterator in a derived class with a template<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[1],"tags":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack-related-posts":[],"jetpack_shortlink":"https:\/\/wp.me\/pdhZ2A-36","_links":{"self":[{"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/192"}],"collection":[{"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192"}],"version-history":[{"count":0,"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions"}],"wp:attachment":[{"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wangxiaohu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}