Note that there are some explanatory texts on larger screens.

plurals
  1. POWrap STL vector and change behavior of its iterator
    primarykey
    data
    text
    <p>There is such code:</p> <pre><code>#include &lt;iostream&gt; #include &lt;vector&gt; template &lt;class T&gt; class A{ public: class iterator : public std::vector&lt;T&gt;::iterator{ public: T&amp; operator*(){ ?? } }; iterator begin(){ return v.begin(); // error } iterator end(){ return v.end(); // error } void add(const T&amp; elem){ v.push_back(elem); } private: std::vector&lt;T&gt; v; }; int main() { A&lt;int&gt; a; a.add(2); a.add(4); for(A&lt;int&gt;::iterator it = a.begin(); it != a.end(); ++it){ std::cout &lt;&lt; *it &lt;&lt; std::endl; } return 0; } </code></pre> <p>This is a wrapper for <code>std::vector</code> with my own additional functions. I would like to use <code>std::vector</code>'s iterator, however I want only to change behavior of <code>operator*</code> for iterator:</p> <pre><code>T&amp; operator*(){ // do some additional function // normal behavior, return value of some element in vector ?? } </code></pre> <p>How can I use <code>std::vector</code> and its iterator with modification of only <code>operator*</code>? I would like also to wrap functions like <code>begin()</code> and <code>end()</code> for iterator, how to wrap them properly?</p> <p>EDIT:</p> <p>Using tips from answers in this topic, I managed to solve my problem in following way:</p> <pre><code>#include &lt;iostream&gt; #include &lt;vector&gt; template &lt;class T&gt; class A { public: class iterator : public std::vector&lt;T&gt;::iterator { public: iterator(typename std::vector&lt;T&gt;::iterator c) : std::vector&lt;T&gt;::iterator(c) { } T&amp; operator*() { std::cout &lt;&lt; "Im overloaded operator*\n"; return std::vector&lt;T&gt;::iterator::operator *(); } }; iterator begin() { return iterator(v.begin()); } iterator end() { return iterator(v.end()); } void add(const T&amp; elem) { v.push_back(elem); } private: std::vector&lt;T&gt; v; }; int main() { A&lt;int&gt; a; a.add(2); a.add(4); for (A&lt;int&gt;::iterator it = a.begin(); it != a.end() ; ++it) { std::cout &lt;&lt; *it &lt;&lt; std::endl; } return 0; } </code></pre> <p>Maybe it will be helpful for someone.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload