Je suis nouveau sur le forum, mais je programme en C++ depuis quelques temps déjà (3 ans). Dans le cadre d'un projet (niveau universitaire), j'ai "du" me mettre aux templates, chose que je n'avais jamais pratiquée avant. Plus précisément, je fais une classe de polynomes template.
Ma question est la suivante:
Lorsque je veux spécialiser une méthode de ma classe template (par exemple la division pour les double), le compilateur me dit que que j'ai des déclarations multiples des fonctions spécialisées. Le seul truc que j'ai trouvé pour que ca passe est de déclarer ces spécialisations "inline" ( du style " template<> inline void Polynom<double>:: ..."). Mais de ce que je sais de "inline", c'est qu'il est mieux de l'utiliser sur des fonctions plutot courtes... et la ce n'est pas vraiment le cas. Y a-t-il moyen de faire mieux? Sinon pourquoi ce inline est-il nécessaire?
Merci pour vos réponses!
(Je mettrai les sources quand j'aurai fini de chasser les bugs )
J'ai testé ton code sous VC++Express 2005, compile parfaitement...et s'exécute parfaitement. Mets voir ta fonction main(), mais c'est tout de même étrange... Peut-être pourrais-tu envisager d'installer VC++ (gratuit, download http://www.microsoft.com/france/msdn/vstudio/express/default.mspx).
En fait, je viens de me rendre compte d'un détail auquel je n'avais pas fait attention: J'avais fait un projet de test pour mes polynomes, et celui-ci (toujours sous Dev-C++) marche convenablement sans les "inline" ! C'est par après que je les avais rajoutés...
C'est un "probleme" made in Dev-C++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pour info, il me semble que l'instruction inline sera a dire au compilo de recopier systematiquement le code à chaque appel (au lieu de faire un call).
si le compilo est un tantinet intelligent il est capable de le faire seul.
(ou selon le model de compilation/optimisation que vous avez choisi)
mais bon... un call c env 30 cycles ...
sinon dans ton exemple
template <typename T>
class Polynom
{
void simplify();
};