begin process at 2012 05 30 18:35:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Template: Spécialisation partielle


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

Template: Spécialisation partielle

dimanche 15 mai 2005 à 00:17:21 | Template: Spécialisation partielle

luhtor

Bonsoir, j'ai une classe définie comme suit:

template <class _T, class _T_power> class operator_binary_pow;

et notamment une fonction membre:

template <class _T, class _T_power>
inline _T operator_binary_pow<class _T, class _T_power>::Op_Eval(const _T & _arg1, const _T_power & _arg2) {}

Donc elle ne fait rien pour le moment, mais je voulais la spécialiser mais tout en laissant un type quelconque, est ce possible ?
En gros, je voulais faire ca:

template <class _T>
inline _T operator_binary_pow<class _T, int>::Op_Eval(const _T & _arg1, const int & _arg2) {}

mais j'obtiens plusieurs messages d'erreurs:
_ invalid use of undefined type `class operator_binary_pow<_T, int>'
_ declaration of `class operator_binary_pow<_T, int>'
_ template definition of non-template `_T operator_binary_pow<_T, int>::Op_Eval(const _T&, const int&)'
dimanche 15 mai 2005 à 00:25:27 | Re : Template: Spécialisation partielle

steve_clamage

tu ne peux pas specialiser une fonction membre seule, que des classes template

template <class _T, class _T_power> class operator_binary_pow;
template <class _T> class operator_binary_pow<_T, int>;

dimanche 15 mai 2005 à 00:46:42 | Re : Template: Spécialisation partielle

luhtor

Pourtant, http://casteyde.christian.free.fr/online/cours_cpp/x4755.html
On peut spécialiser une méthode d'une classe template.

Il y cet exemple:
template <class T>
void Item<T>::print(void) const
{ cout << item << endl; }

template <>
void Item<int *>::print(void) const
{ cout << *item << endl; }

Mais je n'arrive pas à appliquer ca.
La spécialisation implique t-elle forcément la définition de tous les types.

dimanche 15 mai 2005 à 00:59:58 | Re : Template: Spécialisation partielle

steve_clamage

j'avais oublié ca, par contre tu as bien une erreur de synthaxe

template <class _T>
inline _T operator_binary_pow<_T, int>::Op_Eval(const _T & _arg1, const int & _arg2) {}

tu fait quoi exactement avec ce code, tu t'essayes aux expressions templates ?

dimanche 15 mai 2005 à 01:23:25 | Re : Template: Spécialisation partielle

luhtor

Oui exact, mais c'était une erreur de post :)
La déclaration suivante ne marche pas:
template <class _T>
inline _T operator_binary_pow<_T, int>::Op_Eval(const _T & _arg1, const int & _arg2) {}

Toujours les 3 memes messages d'erreurs.
Ce code est une partie de ma librairie sur les opérateurs. Librairie qui me sert pour gérer un peu de calcul formel.

En fait si ca peu éclaircir, voila la partie du code:

template <class _T, class _T_power>
class operator_binary_pow_int : public operator_binary<_T, _T_power, _T>
{
     public:
          ... // destructeur et constructeur
         
          virtual inline _T Op_Eval(const _T & _arg1, const _T_power & _arg2) { }
          ... // d'autres trucs
};

// la spécialisation suivante ne marche donc pas.
template <class _T>
inline _T operator_binary_pow_int<_T, int>::Op_Eval(const _T & _arg1, const int & _arg2)
{
     std::cout << "SPE" << std::endl;
    return 0.0f;
}

// par contre cela marche très bien
template <>
inline float operator_binary_pow_int<float, int>::Op_Eval(const float & _arg1, const int & _arg2)
{
     std::cout << "SPE" << std::endl;
    return 0.0f;
}

Donc le C++ ne permet peut etre pas ce que je souhaiterais.
dimanche 15 mai 2005 à 18:19:03 | Re : Template: Spécialisation partielle

steve_clamage

c'est ce que je crois, faire une specialisation partielle de ta classe est une solution, il y a peut etre mieux.


Cette discussion est classée dans : const, template, binary, operator, pow


Répondre à ce message

Sujets en rapport avec ce message

Template et operator= (c++) [ par Crownless00 ] J'ai la classe template suivante :template class Point3D{public :    Point3D(Type posX, Type posY, Type posZ) {...}    Point3D() {x = 0; y = 0; z = 0; Créer un classe de matrice [ par kazeton ] Bonjour à tous,Je débute en c++ et je voudrais réaliser un classe de matrice.On m'a donné le .h et on m'a demandé de réaliser un .cc afin de définir t Classe Template - Probleme d'edition de lien [ par ano2345 ] Bonjour a tous,   <p class="MsoNormal" style="MARG Surcharge d'opérateur [ par lucyhle ] Bonjour, J'ai des trous de mémoires de de compétences sur la surcharge d'opérateur. A quoi ca sert? Par exemple ici: pourquoi surcharge t'on les opé pb avec template et surcharge [ par luhtor ] Je veux créer une classe vecteur dont le type des vecteurs peut varié. Et je cherche à surcharger l'opérateur << . Quand je supprime la notion de temp classe matrice [ par pabreto ] bonjour!je dois écrire le matrice.c d'une classe de matrice à partir d'un matrice.h que l'on me donne et que je n'a pas le droit de modifier.voici mes VC++ 6 /recompilé sur VC++ 2005 [ par lui88 ] Bonjour , j'essai de recompilé mon programme sur VC++ 2005 , mais plein d'erreur s'affiche :s. j'en est reglé une grande partie mais là je n'y arrive Spécialisation des template [ par lglandeur ] Bonjour,J'ai une fonction template qui appartiens a une class (qui n'est pas template), et je souhaite spécialiser cette fonction pour le type std ::s operator[] [ par lovo ] Salut, je créer une classe matrice en ce moment avec comme data member un double**. Je n'arrive pas a faire l'opérateur d'acces à ma matrice [code=cp


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 1,576 sec (4)

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