Je voulais trier un vecteur contenant des ints dans l'ordre inverse, mais depuis que je m'étais tellement habitué à taper la déduction en c ++, j'avais passé l'objet fonction supérieur & lt; & gt; () sans spécifier int, puisque quoi d'autre est-ce que ça pourrait être? Cela ne fonctionnait pas avec g ++, mais fonctionnait avec le compilateur de Visual Studio, cependant j'ai remarqué que void était utilisé par Visual Studio (je ne sais pas si c'est correct). Est-il possible pour un objet fonction de déduire automatiquement des types, pourquoi ou pourquoi pas? Sinon, existe-t-il une solution de contournement, car les types peuvent être longs à taper?

2
fYre 31 déc. 2015 à 02:59

2 réponses

Meilleure réponse

C'est une fonctionnalité qui a été introduite par c ++ 14 (qui est prise en charge par g ++ 5.1 et peut être activée en passant le drapeau -std=c++14).

Si vous ne spécifiez pas de type, le compilateur prend celui par défaut (void) pour lequel il existe une spécialisation. Cette spécialisation a une fonction membre operator() basée sur un modèle pour laquelle les types de paramètres sont ensuite déduits par le compilateur en fonction du type de valeur de l'itérateur.

2
MikeMB 31 déc. 2015 à 00:16

Il existe une spécialisation de std::greater<void>, {{X1} } étant l'argument modèle par défaut de std::greater<class T> depuis C ++ 14.

Cette spécialisation implémente simplement x > y, en déduisant les types d'argument et de retour.

1
YSC 31 déc. 2015 à 00:06