C définit diverses règles concernant la promotion d'entier, voici un great answer décrivant comment cela fonctionne.Promotion d'entier, C++ et modèles
Dans GCC vous pouvez le faire:
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
qui évaluera la valeur maximale du type déterminé par les règles de C comme ci-dessus.
En utilisant std::min
ou std::max
en utilisant des types mixtes, il est nécessaire de fournir le type approprié de jeter comme un paramètre de modèle:
size_t const subcount = std::min<Offset>(count, treecap - offset);
Pour obtenir un min/max qui permet d'évaluer le type selon le C règles de promotion d'entier, il serait nécessaire de savoir comment les types se rapportent, et quel serait le type résultant, pour chaque combinaison de types d'entrée gauche et droite. Je souhaite effectuer un min/max, avec le même comportement que l'échantillon C sous GCC donné ci-dessus, et avec la même promotion (assurant ainsi le même comportement que dans GCC). Comment puis-je faire cela en C++ et/ou MSVC?
Notez que immédiatement après avoir effectué ce min/max "naturel", je serai numeric_cast
dans la plage de taille attendue.
Êtes-vous à la recherche peut-être [un modèle 'promote'] (http://stackoverflow.com/questions/2426330/uses- de-ac-arithmétique-promotion-en-tête/2450157 # 2450157)? –
@ James McNellis: Oui quelque chose comme ça –