2010-11-26 19 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; 

コードのコメント(3行上)をご覧ください。基本的には、AllocFactor_Coreクラスを通常の非テンプレートクラスとして使用していて、ディレクティブを使用してこのクラスの名前を指定した後、::およびfnc nameを使用すると動作しますが、AllocFactor_Coreをテンプレートとして宣言するとすぐに私はそれのためにparamsを提供しようとしています。テンプレートクラスから継承

+1

使用 '' ! – rubenvb

答えて

4

あなたの拠点クラスにはtemplate template parameterが必要ですが、具体的なクラスに渡しています。例えば代わりに、次のいずれかの理由は、クラス名の注入動作しない、次のことを

using AllocFactor_Core<::AllocFactorScientific>::getFactor; 

注:C++での代わりに ``

using AllocFactor_Core<AllocFactorScientific>::getFactor; 
0

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

+0

@Let_Me_Beいいえ...提案したとおりに変更しましたが、これと同じエラーが発生しました –

+0

@別のエラーが報告されるはずです。使用する指示を使用するとは何ですか? –

+0

@Let_Me_Be usingディレクティブは、私が選択したfncをスコープに持ち込むと仮定しています。 –

-1

ネストされたテンプレートパラメータを入力する必要がある場合は、それぞれの間に少なくとも1つのスペースを含めるようにしてください> C++パーサが

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

によって混乱してしまう

それは

する必要があります
AllocFactor_Core<AllocFactorScientific<Mantissa,Exponent,Base,Tag> > 
+0

-1 –

関連する問題