F
farseerfc
Hi, everyone here loves C++;
As a student studying data structure, I'm writting a single list (with only
one pointer to identity the next node in its node struct) simulating
std::list like:
template <typename T, typename Alloc> class slist {...};
Here Alloc accepts a std::allcator . And within the same namespace I wrote
its iterator:
template <typename T> class slist_iterator {...};
the problem is that when I want to say slist is slist_iterator's friend, I
can't find a syntax to express exactly what I want, I mean when I write in
side slist_iterator:
//inside slist_iterator
template <typename Ty,typename Alloc> friend class slist;
all kinds of slists is the friend of slist_iterator now, ie,
slist<double,std::allocator<double> > is also a friend of
slist_iterator<int> , that is not what I want.And I can not write this:
friend class slist<T,Alloc>;
because inside slist_iterator there is no information about Alloc.
What I want is a partial template friend declaration, something like a
partial template specialization:
template<typename Alloc> friend class slist<T,Alloc>;
that means all slist with the same element type is the friend of
slist_iterator, but no more further.
But in all compilers I tested, the sentence above is a syntax error.
So can I / howto write this , is there any syntax support or
metaprogramming tech to achieve this ?
As a student studying data structure, I'm writting a single list (with only
one pointer to identity the next node in its node struct) simulating
std::list like:
template <typename T, typename Alloc> class slist {...};
Here Alloc accepts a std::allcator . And within the same namespace I wrote
its iterator:
template <typename T> class slist_iterator {...};
the problem is that when I want to say slist is slist_iterator's friend, I
can't find a syntax to express exactly what I want, I mean when I write in
side slist_iterator:
//inside slist_iterator
template <typename Ty,typename Alloc> friend class slist;
all kinds of slists is the friend of slist_iterator now, ie,
slist<double,std::allocator<double> > is also a friend of
slist_iterator<int> , that is not what I want.And I can not write this:
friend class slist<T,Alloc>;
because inside slist_iterator there is no information about Alloc.
What I want is a partial template friend declaration, something like a
partial template specialization:
template<typename Alloc> friend class slist<T,Alloc>;
that means all slist with the same element type is the friend of
slist_iterator, but no more further.
But in all compilers I tested, the sentence above is a syntax error.
So can I / howto write this , is there any syntax support or
metaprogramming tech to achieve this ?