2

この質問にどのタイトルを付けるかさえわかりません。うまくいけば、コードは私がやろうとしていることを示しています:

#include <string>
#include <list>
using namespace std;

template<typename A> class Alpha { public: A m_alpha_a; };
template<typename B> class Bravo { public: B m_bravo_b; };

template<> class Alpha<string> { public: string m_alpha_string; };

template<typename B>
template<> class Alpha<Bravo<B> > 
{ 
public: 
    Bravo<B> m_bravo_class;   // Line A
}; 

int main()
{
    Alpha<int> alpha_int;
    alpha_int.m_alpha_a= 4;

    Alpha<string> alpha_string;
    alpha_string.m_alpha_string = "hi";

    Alpha<Bravo<int> > alpha_bravo_int;
    alpha_bravo_int.m_bravo_class.m_bravo_b = 9;
};

Alpha<A>Aが任意のタイプの場合の特殊化を記述したいのですBravo<B>が、コンパイラーは


クラステンプレートを囲む'>'トークンの前の無効な明示的な特殊化は明示的に特殊化されていません

(を参照して// Line Aください。)私がやりたいことをするための正しい構文は何ですか?

4

2 に答える 2

4

交換するだけ

template<typename B>
template<> class Alpha<Bravo<B> > 

template<typename B>
class Alpha<Bravo<B> > 

つまり、template<>ここで削除します。

于 2010-05-14T19:22:15.937 に答える
1

あなたの問題は、繰り返されるテンプレートの仕様にあるようです。1つだけ使用する必要があります。このような:

#include <string>                                                                                                                                                                                                          
#include <list>                                                                                                                                                                                                            
using namespace std;                                                                                                                                                                                                       

template<typename A>                                                                                                                                                                                                       
class Alpha { public: A m_alpha_a; };                                                                                                                                                                                      

template<typename B>                                                                                                                                                                                                       
class Bravo { public: B m_bravo_b; };                                                                                                                                                                                      

template<> class Alpha<string> { public: string m_alpha_string; };                                                                                                                                                         

template<typename B>                                                                                                                                                                                                       
class Alpha< Bravo<B> >                                                                                                                                                                                                    
{                                                                                                                                                                                                                          
public:                                                                                                                                                                                                                    
    Bravo<B> m_bravo_class;   // Line A                                                                                                                                                                                    
};                                                                                                                                                                                                                         

int main()                                                                                                                                                                                                                 
{                                                                                                                                                                                                                          
    Alpha<int> alpha_int;                                                                                                                                                                                                  
    alpha_int.m_alpha_a= 4;                                                                                                                                                                                                

    Alpha<string> alpha_string;                                                                                                                                                                                            
    alpha_string.m_alpha_string = "hi";                                                                                                                                                                                    

    Alpha<Bravo<int> > alpha_bravo_int;                                                                                                                                                                                    
    alpha_bravo_int.m_bravo_class.m_bravo_b = 9;                                                                                                                                                                           
};                                                                                                                                                                                                                         
于 2010-05-14T19:31:15.073 に答える