Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récursion sur un membre template d'une class template

22 réponses
Avatar
AG
Bonjour,

Est-il seulement possible de faire ceci, et si oui comment (car ce code ne
compile pas)

Merci d'avance,

Alexandre.

#define N 20

template<class T> class A
{
public:
template<int D> void f(T *a);
};

template<class T> template<int D> void A<T>::f<D>(T *a)
{
int i;
for(i=0;i<9;i++)
a[i+1]+=a[i];
f<D-1>(a+10);
}

template<class T> template<> void A<T>::f<0>(T * a)
{
int i;
for(i=0;i<9;i++)
a[i+1]+=a[i];
}

int main()
{
A<int> monObjet;
int tab[N];
monObjet.f<1>(tab);
return 0;
}

2 réponses

1 2 3
Avatar
Jean-Marc Bourguet
Jean-Marc Bourguet writes:

Quand j'ai du temps je reflechirai a cela encore un peu.


Je ne vois rien que des variantes sur le typelist de Michael.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
AG
Je ne vois rien que des variantes sur le typelist de Michael.
finalement j'ai poussé un peu mon outil, et il se trouve qu'il accepte la

récursivité sur les classes template. Je pense qu'avec cela on va s'en
sortir :

const int Nb= 4;

template<int N> class tab
{
public:
tab<N+1> rec;
template <class T> void f(T *a)
{
for(int i=0;i<10;i++)
a[N*10+i+1]+=a[N*10+i];
rec.f<T>(a);
};
};

template <> class tab<Nb>
{
public:
template<class T> void f(T *a)
{
for(int i=0;i<10;i++)
a[Nb*10+i+1]+=a[Nb*10+i];
};
};

merci à vous deux pour toutes ces propositions. J'ai beaucoup appris.

AG

1 2 3