2010-11-26 4 views
1
  #include <iostream> 
      #include <math.h> 
      using namespace std; 

      template<template<short,short,short,int> class Derived> 
       struct AllocFactor_Core 
       { 

       private: 
        static long double factor_; 
        static long double calcFactor_(const short mantissa, const short exponent,const short base) 
        { 

         return mantissa * ::pow(static_cast<long double>(base),exponent); 
        } 
       public: 
        static const long double getFactor() 
        { 
         return factor_; 
        } 

        void setFactor(const short mantissa,const short exponent,const short base) 
        { 
         factor_ = calcFactor_(mantissa,exponent,base); 
        } 
        void setFactor(const long double factor) 
        { 
         factor_ = factor; 
        } 

       }; 

       template<short Mantissa, short Exponent, short Base = 10, int Tag = 0> 
       struct AllocFactorScientific : private AllocFactor_Core<AllocFactorScientific> 
       { 
        static short base_; 
        using AllocFactor_Core<AllocFactorScientific<Mantissa,Exponent,Base,Tag>>::getFactor; 
     //I'm getting an error here saying: error: type/value mismatch at argument 1 in template 
     //parameter list for 'template<template<short int <anonymous>, short int <anonymous>, short int 
    // <anonymous>, int <anonymous> > class Derived> struct AllocFactor_Core'| 
        }; 
       template<short Mantissa, short Exponent, short Base, int Tag> 
       short AllocFactorScientific<Mantissa, Exponent, Base,Tag>::base_ = Base; 

Veuillez vous reporter au commentaire dans le code (3 lignes ci-dessus). Ce qui se passe, c'est que si j'ai la classe AllocFactor_Core en tant que classe standard non-template et quand j'utilise directive j'utilise juste le nom de cette classe, suivi du nom de :: et fnc, mais dès que je déclare AllocFactor_Core et j'essaye de fournir des params pour cela je me trompe d'erreur.Hériter de la classe de modèle

+1

Utiliser '' au lieu de '' en C++! – rubenvb

Répondre

4

Votre base La classe attend un template template parameter, mais vous lui passez une classe concrète. Utilisez par exemple ce qui suit à la place:

using AllocFactor_Core<::AllocFactorScientific>::getFactor; 

Notez que ce qui suit ne fonctionne pas non plus à cause de l'injection de nom de classe:

using AllocFactor_Core<AllocFactorScientific>::getFactor; 
0

AllocFactor_Core<AllocFactorScientific<Mantissa,Exponent,Base,Tag>> devrait être AllocFactor_Core<AllocFactorScientific>

+0

@Let_Me_Be non ... J'ai changé pour comme vous avez proposé et toujours cette même erreur –

+0

@There Eh bien, il devrait certainement signaler une erreur différente. Qu'est-ce que la directive d'utilisation est censée faire? –

+0

@Let_Me_Be La directive using est supposée apporter à la portée les fnc que je choisis. –

-1

Lors de la saisie des paramètres de modèle imbriqués, assurez-vous d'inclure au moins un espace entre chaque>

analyseur C++ est perturbé par les

AllocFactor_Core<AllocFactorScientific<Mantissa,Exponent,Base,Tag>> 

Il devrait être

AllocFactor_Core<AllocFactorScientific<Mantissa,Exponent,Base,Tag> > 
+0

-1 car AllocFactor_Core prend un modèle –

Questions connexes