像这样的东西:
std::bind1st(std::mem_fun(&istream::get ??), cin)
. 这似乎对我不起作用。
编辑:
利用 :
vector<int> vNumbers;
generate_n(back_inserter(vNumbers), iNumCount, functor);
std::mem_fun
需要一个指针。也一样
bind(std::mem_fun(&istream::get), &cin)
在哪里
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); }
您可能还想使用std::istream_iterator
自定义/被盗copy_n
算法(遗憾的是这不是标准的):
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;
}
我认为标准绑定函数不允许您定义空函数。bind1st
绑定到二元函数的第一个参数并返回一个将其参数作为绑定函数的第二个参数传递的一元函数。
但是,您可以在标准库之外使用 Boost.Bind:
boost::bind(&istream::get, &cin)