Le code le plus simple est le meilleur asker:Comment simplifier la déclaration fastidieuse des paramètres de lambdas en C++ 0x?
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> coll;
for_each(coll.begin(), coll.end(), [](vector<int>::value_type n) -> void {});
return 0;
}
Ici, vector<int>::value_type n
est fastidieux. Je veux avoir un utilitaire de type auto pour déduire le bon type de n automatiquement; tout comme les suivantes:
for_each(coll.begin(), coll.end(), [](auto_type n) -> void {});
Pour être plus gourmand, je veux auto_type prendre un argument utilisé pour en déduire le type de n. L'argument peut être un pointeur (intelligent) ou une référence au conteneur, ou un itérateur du conteneur.
Chers gourous, comment mettre en œuvre cela?
Si le conteneur n'est pas de type vectoriel, alors decltype (coll [0]) n'est pas valide. Cette solution est moins générique. decltype (* coll.begin()) est trop moche. – xmllmx
Parfois, nous avons seulement un itérateur, for_each (firs, last, [] (??? value) -> void {}); Que diriez-vous de auto_type dans un tel cas? – xmllmx
@xmllmx: Vous pouvez écrire une aide triviale pour coll.begin(). Le problème avec l'écriture d'une sorte de auto_type dans ce cas est que vous ne pouvez pas modéliser un lambda ou son opérateur(), donc je doute fort que vous obtiendrez une réponse générique ici. – Puppy