2009-02-23 2 views
1

Je suis perplexe ici, et demande votre aide. VC2005SP1 avale ce code (effacé) mais gcc 4.0.1 s'éclipse ... Veuillez me signaler l'erreur évidente? TIA!Modèle C++: OKay pour VC2005SP1, gcc rentre-t-il?

template<typename BCT, typename UIDT> 
class Factory 
{ 
public: 
    template<typename CT> 
    bool Register(UIDT UniqueID) 
    { 
     if (UniqueID > 10) 
      return(false); 

     CreateObject2<BCT, CT>; 

     return(true); 
    } 
}; 


template <typename MC, typename MT> 
class Manager : public Factory<MC, MT> 
{ 
public: 
    bool RegisterType(const MT Type, const std::string TypeName) 
    { 
     return Factory<MC, MT>::Register<MC>(Type); // gcc claims "expected primary-expression before '>' at this point 
    } 
}; 

Répondre

5

VS est gentil.

return Factory<MC, MT>::template Register<MC>(Type); devrait fonctionner sous les deux compilateurs.

+0

Wow. 4 mn pour avoir la réponse (":: template" a fait l'affaire). Je suis impressionné. Oh, et merci !! –

+0

Pour l'enregistrement, le compilateur est supposé voir Factory :: Register (Type) sans le modèle en tant que Factory :: Register < MC > (Type). VS essaye d'être plus utile (sans doute plus qu'il ne le devrait), mais c'est pourquoi g ++ s'est étouffé. –

+0

Et, pour mémoire, g ++ avait une fois cette "fonctionnalité" mais l'enlevait car le code écrit sans "template" et "typename" compilerait sur g ++ mais pas sur VC à la fois, ... –