Re: Recursive templates
On 11=D4 4=C8=D5, =CF =CE=E711=CA=B116=B7=D6, andreyvul <andrey....@gma=
il.com> wrote:
On Nov 4, 10:12 am, Barry <dhb2...@gmail.com> wrote:
On 11=D4 4=C8=D5, =CF =CE=E711=CA=B104=B7=D6, andreyvul <andrey....=
@gmail.com> wrote:
I have a template function like this:
std::vector<std::pair<Square<T>, Triangle<T> > > *
recarrow(T a, T b, int n) {
/* ... */
}
template <class T>
struct Square {
/* ... */};
template <class T>
struct Triangle {
/* ... */
};
Now, g++ has problems recursively creating the std::vector from
Square<T>.
Are recursive templates part of C++98 (or even C++0x) or is g++ just
non-compliant?
You need to forward declaring the two template class before you used
them in the function definition(or even declaration) of "recarrow"
template <class T>
struct Square;
template <class T>
struct Triangle;
And don't foget "template <class T>" for recarrow.
So why must I forward-declare the definition instead of the body?
Is this similar to C's
typedef struct A {
B b;} A;
typedef struct B {
A a;} B;
?
The actual code was:
template <class T> struct Square {}
template <class T> struct Triangle {}
std::vector<std::pair<Square<T>, Triangle<T> > > *
recarrow(T a, T b, int n) {}
Why must the template class be forward-declared still?
You don't have to if you define "Square" and "Triangle" before the
template
function "recarrow". And don't forget "template <class T>" before
recarrow again.
But from the title of your post -- "Recursive", I wildly guesses that
you
want things that way.
--
Best Regards
Barry