[templates] Bonne pratique ?
Salut la foule !
J'ai une question qui me taraude depuis quelques jours.
Ayant besoin de templates pour mon projet, j'ai l'envie incessante de mettre le minimum de code dans les templates pour le mettre plutôt dans une classe mère.
Le code que je mets dans le template est celui nécessitant la classe T du template.
Exemple :
Code:
1 2 3 4 5 6 7 8 9 10
|
class LoadObj
{
public:
const int getID() const { return _id; }
void setID(const int id) { _id = id; }
private:
int _id;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
template<class T>
class TCRMLoadedObject
: public LoadObj
{
// crée une instance avec un ID automatique
static T * const load()
{
static int CURRENT_ID = 0;
CURRENT_ID++;
// On crée une instance et on lui met un ID
TCRMLoadedObject<T> * tmpLoaObj = new T();
tmpLoaObj->setID(CURRENT_ID);
return tmpLoaObj;
}
} |
Code:
1 2 3 4 5 6 7
|
int main()
{
TCRMLoadedObject<Bonzomme> * toto = TCRMLoadedObject<Bonzomme>::load();
toto->getID(); // vaudra qqchose
} |
C'est une bonne idée ou il fôdrait que je mette tout directement dans le template ?..
Parce que le problème est que si ensuite je veux faire du polymorphisme, je ne peux pas utiliser le template, comme dans l'exemple ci-dessous :
Code:
1 2 3 4 5 6
|
// ça ne va pas marcher, le compilo va me dire qu'il manque l'argument 1 du template...
void afficher(TCRMLoadedObject * obj)
{
print( obj->getD() );
} |
Comment faire ?
Merci :)