Si vous utilisez plusieurs tuples différents dans votre code, vous pouvez vous en sortir en condensant le nombre de foncteurs que vous utilisez. Je dis cela parce que j'ai souvent utilisé les formes suivantes de foncteurs :
template<int N>
struct tuple_less{
template<typename Tuple>
bool operator()(const Tuple& aLeft, const Tuple& aRight) const{
typedef typename boost::tuples::element<N, Tuple>::type value_type;
BOOST_CONCEPT_REQUIRES((boost::LessThanComparable<value_type>));
return boost::tuples::get<N>(aLeft) < boost::tuples::get<N>(aRight);
}
};
Cela peut sembler exagéré mais pour chaque emplacement dans la structure, je devrais créer un nouvel objet foncteur en utilisant une structure, mais pour un tuple, je change simplement N
. Mieux encore, je peux le faire pour chaque tuple au lieu de créer un tout nouveau foncteur pour chaque structure et pour chaque variable membre. Si j'ai N structures avec M variables membres que NxM functeurs j'aurais besoin de créer (pire scénario) qui peut être condensé vers le bas à un petit morceau de code.
Naturellement, si vous optez pour la méthode des Tuple, vous devrez également créer des Enums pour travailler avec eux :
typedef boost::tuples::tuple<double,double,double> JackPot;
enum JackPotIndex{
MAX_POT,
CURRENT_POT,
MIN_POT
};
et boom, votre code est complètement lisible :
double guessWhatThisIs = boost::tuples::get<CURRENT_POT>(someJackPotTuple);
car il se décrit lui-même quand on veut obtenir les éléments qu'il contient.
0 votes
Je viens de remarquer que j'avais oublié le moulage question : la mise en œuvre de la
tuple
est définie par l'implémentation, elle dépend donc de votre implémentation. Personnellement, je no comptez-y.