Adding STL iterator support to custom collection class — followup












-1












$begingroup$


I read the excellent answer to the question Example of adding STL iterator support to custom collection class on this site; but would like furthermore the iterator class to be a nested class (because of shared types). The skeleton I want is:



template <typename T, std::size_t Capacity> class RingQueue
{
...
template <typename TT> class RingIter { ... operations ++, --, ... }
public:
using iterator = RingIter<T>;
using const_iterator = RingIter<const T>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
... define begin(), end(), ...
};

// this is the line that doesn't compile!
template<typename T, std::size_t Capacity, typename TT> class std::iterator_traits<RingQueue<T,Capacity>::RingIter<TT>>
{
public:
using difference_type = std::ptrdiff_t;
using size_type = std::size_t;
using value_type = TT;
using pointer = TT*;
using reference = TT&;
using iterator_category = std::random_access_iterator_tag;
};


and it's in this last part that I'm stuck -- whatever I tried, I can't get to extend std::iterator_traits correctly.










share|improve this question







New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 2




    $begingroup$
    We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
    $endgroup$
    – bruglesco
    2 hours ago










  • $begingroup$
    Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
    $endgroup$
    – Quuxplusone
    51 mins ago
















-1












$begingroup$


I read the excellent answer to the question Example of adding STL iterator support to custom collection class on this site; but would like furthermore the iterator class to be a nested class (because of shared types). The skeleton I want is:



template <typename T, std::size_t Capacity> class RingQueue
{
...
template <typename TT> class RingIter { ... operations ++, --, ... }
public:
using iterator = RingIter<T>;
using const_iterator = RingIter<const T>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
... define begin(), end(), ...
};

// this is the line that doesn't compile!
template<typename T, std::size_t Capacity, typename TT> class std::iterator_traits<RingQueue<T,Capacity>::RingIter<TT>>
{
public:
using difference_type = std::ptrdiff_t;
using size_type = std::size_t;
using value_type = TT;
using pointer = TT*;
using reference = TT&;
using iterator_category = std::random_access_iterator_tag;
};


and it's in this last part that I'm stuck -- whatever I tried, I can't get to extend std::iterator_traits correctly.










share|improve this question







New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$








  • 2




    $begingroup$
    We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
    $endgroup$
    – bruglesco
    2 hours ago










  • $begingroup$
    Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
    $endgroup$
    – Quuxplusone
    51 mins ago














-1












-1








-1





$begingroup$


I read the excellent answer to the question Example of adding STL iterator support to custom collection class on this site; but would like furthermore the iterator class to be a nested class (because of shared types). The skeleton I want is:



template <typename T, std::size_t Capacity> class RingQueue
{
...
template <typename TT> class RingIter { ... operations ++, --, ... }
public:
using iterator = RingIter<T>;
using const_iterator = RingIter<const T>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
... define begin(), end(), ...
};

// this is the line that doesn't compile!
template<typename T, std::size_t Capacity, typename TT> class std::iterator_traits<RingQueue<T,Capacity>::RingIter<TT>>
{
public:
using difference_type = std::ptrdiff_t;
using size_type = std::size_t;
using value_type = TT;
using pointer = TT*;
using reference = TT&;
using iterator_category = std::random_access_iterator_tag;
};


and it's in this last part that I'm stuck -- whatever I tried, I can't get to extend std::iterator_traits correctly.










share|improve this question







New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




I read the excellent answer to the question Example of adding STL iterator support to custom collection class on this site; but would like furthermore the iterator class to be a nested class (because of shared types). The skeleton I want is:



template <typename T, std::size_t Capacity> class RingQueue
{
...
template <typename TT> class RingIter { ... operations ++, --, ... }
public:
using iterator = RingIter<T>;
using const_iterator = RingIter<const T>;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
... define begin(), end(), ...
};

// this is the line that doesn't compile!
template<typename T, std::size_t Capacity, typename TT> class std::iterator_traits<RingQueue<T,Capacity>::RingIter<TT>>
{
public:
using difference_type = std::ptrdiff_t;
using size_type = std::size_t;
using value_type = TT;
using pointer = TT*;
using reference = TT&;
using iterator_category = std::random_access_iterator_tag;
};


and it's in this last part that I'm stuck -- whatever I tried, I can't get to extend std::iterator_traits correctly.







c++ c++11 iterator collections






share|improve this question







New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 3 hours ago









grokgrok

991




991




New contributor




grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






grok is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 2




    $begingroup$
    We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
    $endgroup$
    – bruglesco
    2 hours ago










  • $begingroup$
    Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
    $endgroup$
    – Quuxplusone
    51 mins ago














  • 2




    $begingroup$
    We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
    $endgroup$
    – bruglesco
    2 hours ago










  • $begingroup$
    Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
    $endgroup$
    – Quuxplusone
    51 mins ago








2




2




$begingroup$
We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
$endgroup$
– bruglesco
2 hours ago




$begingroup$
We only review working code. We don't help people implement features. Also, it isn't a follow-up if you weren't the author of the original post.
$endgroup$
– bruglesco
2 hours ago












$begingroup$
Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
$endgroup$
– Quuxplusone
51 mins ago




$begingroup$
Also, your bug could be as simple as the fact that you forgot the typename keyword before RingQueue<T,Capacity>:: and the template keyword before RingIter<TT>. (Have you watched "Template Normal Programming"?)
$endgroup$
– Quuxplusone
51 mins ago










0






active

oldest

votes











Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");

StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






grok is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214210%2fadding-stl-iterator-support-to-custom-collection-class-followup%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes








grok is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















grok is a new contributor. Be nice, and check out our Code of Conduct.













grok is a new contributor. Be nice, and check out our Code of Conduct.












grok is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Code Review Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214210%2fadding-stl-iterator-support-to-custom-collection-class-followup%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

is 'sed' thread safe

How to make a Squid Proxy server?