J'ai reçu deux classes de modèles CarOwner
et Truck
.Utilisation de C++ enum à partir d'une classe de modèle différente en tant que paramètre de fonction
// CarOwner.h
#include "Truck.h"
template<size_t T1, typename T2>
class CarOwner {
public:
enum MyEnum {
red = 0,
green
}
void DoSomething();
private:
Truck<DataContainer<T1,T2>> truck_;
MyEnum color;
}
// CarOwner.hpp
template<size_t T1, typename T2>
void CarOwner<T1,T2>::DoSomething(){
this->truck_.setEnum(this->color);
}
// Truck.h
template<typename G>
class Truck {
void setEnum(CarOwner<T1,T2>::MyEnum color); // <---
}
Mon problème est de comprendre comment écrire la déclaration de fonction de void setEnum();
. Comme indiqué dans le code ci-dessus, je veux réellement passer la fonction une énumération de type CarOwner<T1,T2>::MyEnum color
. Comme j'ai besoin de #include "Truck.h"
dans la classe CarOwner
, je ne peux pas inclure le CarOwner
dans la classe Truck
. En outre, les paramètres de modèle T1
et T2
sont inconnus à l'intérieur de la classe Truck
car il a un type de modèle différent G
.
Je n'ai aucune idée comment déclarer correctement cette fonction pour accepter le CarOwner<T1,T2>::MyEnum
. Toute aide est appréciée!
Edit: paramètre de modèle G
est une combinaison de T1
et T2
.
Ce code est juste un exemple pour énoncer mon problème et la conception est évidemment étrange.
Cela semble être un design étrange. Pourquoi le propriétaire de la voiture * aurait-il une couleur? –
'DoSomething' doit d'abord être déclaré dans le corps de' CarOwner'. 'Truck truck_;' ne fonctionnera pas car 'Truck' est un template, donc vous devrez passer' G' comme paramètre de template 'CarOwner'. 'setEnum' doit également être un modèle. – VTT
Merci pour les conseils. Je veux vraiment éviter d'ajouter un paramètre de template supplémentaire à 'CarOwner'. Ne serait-il pas possible de déclarer en quelque sorte le 'CarOwner' dans' Truck'? – DummySenior