IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Produit scalaire en méta-prog, problème :p


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut Produit scalaire en méta-prog, problème :p
    Bonjour à tous !

    J'ai actuellement un petit problème pour coder une classe en méta-programmation pour calculer le produit scalaire. Voici pour l'instant ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    template <int N, typename T>
    class A_MultD
    {
       public:
          template <typename R1, typename R2>
     
          static inline T f (const R1 & a, const R2 & b)
          {
             return (a[N]*b[N] + A_MultD<N+1, T>::f (a, b));
          }
    };
     
    // Spécialisation pour N=3
    template <typename T>
    class A_MultD <3, T>
    {
       public:
          template <typename R1, typename R2>
          static inline T f (const R1 & a, const R1 & b)
          {
             return T();
          }
    };
    Toutefois j'obtient des erreurs à la compilation :

    instantiated from `static T A_MultD<N, T>::f(const R1&, const R2&) [with R1 = SVec3<double>, R2 = SVec3<double>, int N = 1, T = double]'

    instantiated from `static T A_MultD<N, T>::f(const R1&, const R2&) [with R1 = SVec3<double>, R2 = SVec3<double>, int N = 0, T = double]'

    instantiated from `T DotProductT(const Vec3<T, Expr>&, const Vec3<T, R2>&) [with T = double, R1 = SVec3<double>, R2 = SVec3<double>]'

    error: no matching function for call to `A_MultD<3, double>::f(const SVec3<double>&, const SVec3<double>&)'
    :: === Build finished: 4 errors, 0 warnings ===
    Visiblement il arrive correctement à instancier les premiers mais bloque pour N=3, pour la spécialisation en fait, et je ne comprends pas, ma fonction est bien définie :/.

    Merci

  2. #2
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    EDIT :

    je viens de trouver en changeant la spécialisation par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <typename T>
    class A_MultD <3, T>
    {
       public:
          static inline T f (const SVec3<T> & a, const SVec3<T> & b)
          {
             return T();
          }
    };
    Bon je comprends pas trop mais bon le principal c'est que ça marche .

    EDIT : et j'ai même économisé un appel comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template <typename T>
    class A_MultD <2, T>
    {
       public:
          static inline T f (const SVec3<T> & a, const SVec3<T> & b)
          {
             return a[N]*b[N];
          }
    };

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        template <typename R1, typename R2>
     static inline T f (const R1 & a, const R1 & b)
          {
             return T();
          }
    petite remarque dans ce template issue de ta specialisation pour 3, tu precises un typename R2 ... hors R2 n'y est jamais utilise !!!

  4. #4
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Erreur d'inattention :p. Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    par curiosite, c a corrige le probleme ?

  6. #6
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Ouep

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'imprécision. (Produit scalaire)
    Par Invité dans le forum C++
    Réponses: 4
    Dernier message: 28/06/2014, 21h28
  2. produit scalaire de 2 string
    Par nypahe dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 06/03/2009, 09h49
  3. calcul de produit scalaire sous PHP
    Par abegault dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2008, 14h41
  4. produit scalaire de 2 vecteurs
    Par aroua dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 07/04/2008, 13h06
  5. Angle entre deux droites quelconques par produit scalaire
    Par cyber_N dans le forum Mathématiques
    Réponses: 6
    Dernier message: 22/05/2005, 20h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo