OVH Cloud OVH Cloud

Template et enum : gros probleme ! :-(

5 réponses
Avatar
Vincent Cantin
Bonjour,

J'ai des variables, leur type est T ou T est un bool ou un int ou un float
ou un std::string ou une enumeration de symbols, ou un std::vector<T>.

Je voudrais pouvoir faire un traitement sur leur contenu qui depend de leur
type primaire (c'est a dire bool ou int ou float ou std::string ou enum de
quelque chose).

J'ai trouve cette maniere de faire :

template <class T> static void CopyFrom(std::vector<T>& variable,
PropertyInstance* pInstance);

static void CopyFrom(bool& variable, PropertyInstance* pInstance);

static void CopyFrom(int& variable, PropertyInstance* pInstance);

static void CopyFrom(float& variable, PropertyInstance* pInstance);

static void CopyFrom(std::string& variable, PropertyInstance* pInstance);



la recursivite du template sur le type T a l'air de bien marcher, mais le
probleme c'est que je ne vois pas comment faire pour les variables dont le
type primaire est une enumeration (i.e. DayOfWeek, std::vector<DayOfWeek>,
std::vector<std::vector<DayOfWeek> >, ...)

Quelqu'un a une solution ?

5 réponses

Avatar
Franck Branjonneau
"Vincent Cantin" écrivait:

J'ai des variables, leur type est T ou T est un bool ou un int ou un float
ou un std::string ou une enumeration de symbols, ou un std::vector<T>.


Qu'est T quand T est un std::vector< T > ?

Attention à std::vector< bool >...

Je voudrais pouvoir faire un traitement sur leur contenu qui depend de leur
type primaire (c'est a dire bool ou int ou float ou std::string ou enum de
quelque chose).

J'ai trouve cette maniere de faire :

template <class T> static void CopyFrom(std::vector<T>& variable,
PropertyInstance* pInstance);

static void CopyFrom(bool& variable, PropertyInstance* pInstance);

static void CopyFrom(int& variable, PropertyInstance* pInstance);

static void CopyFrom(float& variable, PropertyInstance* pInstance);

static void CopyFrom(std::string& variable, PropertyInstance* pInstance);



la recursivite du template sur le type T a l'air de bien marcher,


Quelle récursivité ?

mais le probleme c'est que je ne vois pas comment faire pour les
variables dont le type primaire est une enumeration (i.e. DayOfWeek,
std::vector<DayOfWeek>, std::vector<std::vector<DayOfWeek> >, ...)


Ah, elle est ici la récursivité ? En ce cas il te faut une fonction
CopyFrom récursive :


// 1
template <class T>
static void
CopyFrom(
std::vector< T >& variable,
PropertyInstance* pInstance);

// 2
template <class T>
static void
CopyFrom(
std::vector< std::vector < T > > & variable,
PropertyInstance* pInstance);

En 1 T est « primaire », en 2 il est quelconque.

int
main() {

std::vector< int > v;
std::vector< std::vector< int > > vv;

CopyFrom(v, 0); // Call 1
CopyFrom(vv, 0); // Call 2

}

Quelqu'un a une solution ?


Je n'ai rien compris à la question ?

--
Franck Branjonneau

Avatar
Vincent Cantin
Quelqu'un a une solution ?


Je n'ai rien compris à la question ?



J'ai laisse tombe, j'utilise des unsigned int a la place de mes enum.
C++, c'est vraiment pas pour moi.


Avatar
Stephane Wirtel
Vincent Cantin said the following on 22/02/2006 14:03:
Quelqu'un a une solution ?
Je n'ai rien compris à la question ?




J'ai laisse tombe, j'utilise des unsigned int a la place de mes enum.
C++, c'est vraiment pas pour moi.


Ce n'est pas en disant cela que cela arrangera les problèmes.

Déjà, tu utilises une déclaration de template pour ta fonction CopyForm, mais
ensuite,
tu ne fais que des surcharges de fonctions.

Il ne s'agit pas de spécialisation de template :(

Qu'as-tu réellement envie de faire ? Explique ton idée, peut-être que l'on
pourra te guider dans ta réflexion.



Avatar
Fabien LE LEZ
On Thu, 23 Feb 2006 10:49:53 +0100, Stephane Wirtel
:

C++, c'est vraiment pas pour moi.


Ce n'est pas en disant cela que cela arrangera les problèmes.


Changer de langage et en prendre un plus adapté, ce n'est pas
forcément la pire des solutions.


Avatar
Vincent Cantin
Changer de langage et en prendre un plus adapté, ce n'est pas
forcément la pire des solutions.


Je quitte ma boite dans 2 semaines, et je vais faire du java :-)