begin process at 2012 02 13 02:48:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Spécialisation template et fonctions inline


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Spécialisation template et fonctions inline

jeudi 6 septembre 2007 à 09:59:48 | Spécialisation template et fonctions inline

Samaths

Bonjour à tous!

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  )
jeudi 6 septembre 2007 à 11:59:03 | Re : Spécialisation template et fonctions inline

juju12

Tu devrais pas avoir besoin de inline. Mets voir ton code parce que ta syntaxe paraît correcte (même sans inline).
jeudi 6 septembre 2007 à 12:38:05 | Re : Spécialisation template et fonctions inline

Samaths

Voilà un bout du code:

// Definition de la classe
template <typename T>
class Polynom
{
   [...]

    // Simplification
    void simplify();

   [...]
};

// Definition des methodes
template <typename T>
void Polynom<T>::simplify()
{
      [...]    
};

template <>
inline void Polynom<double>::simplify()
{
         [...]
 };

Tout est dans le même fichier. (J'avais aussi oublié de préciser que je travaille avec Dev-C++ pour ce projet)

Merci!

P.S: la prochaine fois je mettrai dans le forum "débutant" , je l'avais pas vu!

jeudi 6 septembre 2007 à 13:15:18 | Re : Spécialisation template et fonctions inline

juju12

Réponse acceptée !
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 [ Lien ]).
jeudi 6 septembre 2007 à 14:43:43 | Re : Spécialisation template et fonctions inline

Samaths


Ca marche sans le "inline" ?

Voici mon main:

int main(int argc, char *argv[])
{
    Simulation polycristal;
    polycristal.init_display(argc, argv);
    polycristal.init_triangulation();
    polycristal.init_queue();
    system("PAUSE");
    glutMainLoop();
   
    system("PAUSE");
};

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++
jeudi 6 septembre 2007 à 18:28:46 | Re : Spécialisation template et fonctions inline

juju12

Ce code est OK chez moi (doit compiler et retourner 16 (0x10 en hexa)) :

template

<class T>
class A{public:int B(void);};

template

<class T>
int A<T>::B(void) {return 0;}

template

<>
int A<double>::B(void){return 1;}

int

main(void)
{
A<
double> aDouble;
A<
int> aInt;
return aDouble.B()*0x10+aInt.B();
}

C'est ce que tu as fait en simplifié, si ca ne fonctionne pas chez toi je sais plus quoi dire.
jeudi 6 septembre 2007 à 20:58:07 | Re : Spécialisation template et fonctions inline

Samaths

Ca marche aussi est ca donne 16 !

Sinon, j'ai mis tout le code source en ligne.

Je te remercie en tout cas de ton aide!
mardi 11 septembre 2007 à 12:49:54 | Re : Spécialisation template et fonctions inline

foxz

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();
};

template <typename T>
void Polynom<T>::simplify()
{
      [...]    
};


pkoi ne pas faire directement
template <typename T>
class Polynom{
    void simplify() {// le code directement ici //};
};

???

FoxZ...
mercredi 27 février 2008 à 14:54:59 | Re : Spécialisation template et fonctions inline

exar

Membre Club
Exact, FoxZ, tout comme si le inline est "inutile", il n'en tient pas compte...


Cette discussion est classée dans : classe, template, fonctions, inline, spécialisation


Répondre à ce message

Sujets en rapport avec ce message

template? [ par payen ] Salut a tous,je programme actuellement une bibli de traitement d'images en C++, et j'ai un p'tit souci. En fait, j'ai cree une classe image qui contie classe derivee de template [ par payen ] Salut a tous,juste une petite question sur les template et les classes derivees ... j'ai donc une classe template declarre comme suit: template [ par ifren ] salutje veux utilise une classe D utilisant une variable qui peut etre double ou string, je deirve de cette dernier deux autre class Dnum et Dstrpour Erreur de link en utilisant les templates [ par Wett ] Voila j'utilise VC++ 6 et j'ai créé une classe templates toute simple (en fait c une liste chainée :p), de la formedans le .h:template class ChainList Inline asm + classe = erreur! [ par Darkneon ] Salut a tous.Lorsque je mets du codes assembleur dans ma classe le compilateur me renvoit l'erreur suivante."Inline assembly not allowed in inline and Abus de "protected" dans les classes ? [ par Galmiza ] Salut cher lecteur,Voici un exemple de ce qu'on voit assez souvent dans les codes, mais dont je ne saisi pas l'utilité:Dans une classe, protection des Voilà je suis coincé sur les fonctions se situant dans la classe carnet. [ par nulmaisveutcomprendre ] Bonjour voilà comme le dit plus haut mon sujet je suis coincé sur les fonctions de la classe carnet. J'ai déjà fait le reste du code sinon. J'aimerai template dll ou autre??? [ par Bilock ] Bonjour,j'aimerai créer un programme chargeant des dll de traitement audio temps réel.J'aimerai que ces dll contiennent une classe que je puisse insta Classe abstraite et fonctions [ par matge ] BonjourJe possede une classe abstraite dans une librairie .h qui se nomme RTPTRANSMITTERCelle ci possede une fonction INIT(bool Threadsafe)Comment d template et héritage [ par cybermax62 ] j'ai un problème de fond dans ma conception. Je voudrais utiliser une classe template de base Singleton avec des classes héritées (plusieurs fois). Le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,044 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales