Je fais quelque chose qui semble pouvoir être amélioré, mais je n'ai pas assez de compétences pour l'améliorer. Pouvez-vous aider?meilleur moyen de le faire?
Étant donné:
vector<Base*> stuff;
const vector<MetaData>& metaDataContainer = Config.getMetaData();
for(vector<MetaData>::const_iterator i = metaDataContainer.begin(), end = metaDataContainer.end(); i != end; ++i)
{
Base* pCurrent = buildDerivedType(*i);
stuff.push_back(pCurrent);
}
Base* buildDerivedType(MetaData meta)
{
Base* pRetval = NULL;
switch(meta)
{
case MetaData::A:
pRetval = new Alpha();
break;
case MetaData::B:
pRetval = new Beta();
break;
//so on so forth
};
return pRetval;
}
je me sens comme l'instruction switch est mauvais car au moment de la compilation de toutes les valeurs de ENUM sont connues, donc théoriquement nous savons déjà quels types ont besoin d'aller dans des trucs de vecteur. Mais nous le faisons à l'exécution.
À court d'écrire un générateur de code pour cela, existe-t-il un meilleur moyen?
"Lors de la compilation, toutes les valeurs enum sont connues" - vous voulez dire que vous connaissez le contenu de 'metaDataContainer'? Ça ne ressemble pas à ça. Et 'switch' est une façon décente de mettre en œuvre un modèle d'usine. – aschepler
Vous avez raison, je ne sais pas ce que les conteneurs contiennent, mais je connais toutes les valeurs possibles qu'il pourrait contenir. Donc, si MetaData est enum avec A, B, C. Je sais que ce sont les possibilités, mais, je pourrais juste obtenir A et C. – anio