Bonjour je vous explique mon problème,
J'ai d'abord une classe modèle comme ceci:
template <typename HeaderType>
class GenericHeader
{
protected:
typedef union {
HeaderType hdr;
uint8_t buf[sizeof(HeaderType)];
} HeaderContent;
HeaderContent content;
public:
/**
* Utilisé pour créer un nouveau header à partir de rien.
*/
GenericHeader();
/**
* Utilisé pour créer un nouveau header à partir d'un buffer.
* @param buf: buffer contenant les données brutes
*/
GenericHeader(uint8_t *buf);
/**
* Utilisé pour changer la valeur d'un champs dans les en-têtes.
* @param str: Le nom du champs
* @param value: La valeur du champs
*/
template <typename Field>
virtual bool set(std::string str, Field value) = 0;
/**
* Utilisé pour obtenir la valeur d'un champs dans les en-têtes.
* @param str: Le nom du champs
* @return La valeur du champs
*/
template <typename Field>
virtual Field get(std::string str) = 0;
};
J'ai ici deux templates: d'abord HeaderType.
C'est un template qui sera défini lors de l'héritage car pour chaque sous-classe de GenericHeader, j'ai besoin de créer un type union HeaderContent différent.
Puis j'utilise deux autres templates (Field) mais uniquement au niveau des fonctions membres. Je compte instancier leur modèle au moment de leur appel par le biais d'un objet et non pas au moment d'une redéfinition de la classe.
Mais j'ai besoin de garder ces fonctions "virtuelles" car leur implémentation sera différente dans les sous-classes...
Et voici ce que g++ me répond lorsque j'essaie de compiler ça:
./GenericHeader.hpp:36: error: invalid use of ‘virtual' in template declaration of ‘virtual bool GenericHeader<HeaderType>::set(std::string, Field)'
./GenericHeader.hpp:43: error: invalid use of ‘virtual' in template declaration of ‘virtual Field GenericHeader<HeaderType>::get(std::string)'
Je ne trouve pas l'erreur, je suis un peu perdu.... :-/

