[Template] methode template d'une classe pas template
Salut,
Voilà, je travaille sous Visual C++ 6 (qui n'est pas très fort en template :) ), et du coup je voudrais savoir si c'est mon code qui n'est pas bon, ou lui ;)
J'ai une fonction pour instancier un dérivé de Composant, qui compile très bien:
Code:
1 2 3 4 5 6 7 8
| template <typename T>
Composant* ManagerComposant::instancier(std::string _strFichier)
{
// static_cast le template en composant : erreur de compilation si le cast n'est pas possible
Composant* pComposant = static_cast<Composant*>(new T);
// .... beaucoup d'autre code ....
} |
mais à l'utilisation ça se passe moins bien :
Code:
return instancier<Vecteur>(_strFichier);
J'obtiens l'erreur : error C2275: 'Vecteur' : illegal use of this type as an expression
Est-ce que ça vous à l'air correct ?
merci!
(ps: j'utilise une fonction parcequ'elle instancie le composant et fait plein de traitements dessus, qui sont indépendants du type réél du composant)
Re: [Template] methode template d'une classe pas template
Citation:
Envoyé par bigquick
Code:
1 2 3 4 5 6 7 8
| template <typename T>
Composant* ManagerComposant::instancier(std::string _strFichier)
{
// static_cast le template en composant : erreur de compilation si le cast n'est pas possible
Composant* pComposant = static_cast<Composant*>(new T);
// .... beaucoup d'autre code ....
} |
Et bien, j'ai du mal à voir ce à quoi le static cast sert. Soit le paramètre modèle à pour base Composant et ca compile sans cast. Soit ce n'est pas le cas, et ca ne compilera jamais. Le static cast n'aide en rien.
Pour adapter le traitement dans ManagerComposant, tu peux utiliser BOOST::type_traits -> ::boost::is_base_and_derived<T,U>::value