std::mem_fun
prend un pointeur. Donc, ne
bind(std::mem_fun(&istream::get), &cin)
où
template <typename F, typename Res, typename Arg>
struct binder
{
binder(F const& f, Arg const& arg) : f(f), arg(arg) {}
Res operator()() { return f(arg); }
private:
F f; Arg arg;
};
template <typename F, typename Arg>
binder<F, typename F::result_type, Arg> bind(F const& f, Arg const& arg)
{ return binder<F, typename F::result_type, Arg>(f, arg); }
Vous pouvez également utiliser std::istream_iterator
avec une coutume/volée copy_n
algorithme (qui est malheureusement pas standard):
template <typename I, typename O>
O copy_n(size_t n, I first, I last, O result)
{
size_t k = 0;
while (first != last && k++ < n) *result++ = *first++;
return result;
}
est le '?? ou une partie du code, ou essayez-vous d'attirer l'attention sur quelque chose? –
Est-ce que cela doit être une fonction de générateur (?)? La bibliothèque standard a 'istream_iterator' pour lire la prochaine valeur. – visitor
@Marcelo Cantos: :). Non, cela ne fait pas partie du code. J'essaie de demander s'il y a une fonction correcte à mettre là-dedans. – nakiya