J'essaye d'écrire une fonction modèle simple qui imprime chaque élément d'un conteneur, sans utiliser pour les boucles. Jusqu'à présent, j'aipassant la fonction de modèle à std :: for_each
#include <iostream>
#include <vector>
#include <algorithm>
template <typename T> void print_with_space(T x){
std::cout << x << ' ';
}
template <typename T> void print_all(T beg, T end){
std::for_each(beg, end, print_with_space<int>);
std::cout << '\n';
}
int main(){
int a[] = {1, 2, 3};
std::vector<int> v(a, a+3);
print_all(v.begin(), v.end());
return 0;
}
Le code compile et fonctionne, mais seulement parce que je mis print_with_space<int>
dans la mise en œuvre de print_all
. Je voudrais simplement avoir print_with_space
là pour des raisons évidentes, mais le code ne compile pas. Comment puis-je faire cela?
Remplacer par '[&] (T const & x) {print_with_space (x);}' – 0x499602D2
Je mets que le troisième argument for_each, et il n'a pas compiler avec g ++ -std = C++ 11 – xdavidliu
[Voir cette proposition] (http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0091r1.html). –