0

このようなもの :

std::bind1st(std::mem_fun(&istream::get ??), cin)。これは私にはうまくいかないようです。

編集:

使用する :

vector<int> vNumbers;
generate_n(back_inserter(vNumbers), iNumCount, functor);
4

2 に答える 2

1

標準のバインディング関数では、nullary関数を定義できるとは思いません。二項bind1st関数の最初の引数にバインドし、バインドされた関数の2番目のパラメーターとしてそのパラメーターを渡す単項関数を返します。

ただし、標準ライブラリの外に出て、Boost.Bindを使用することはできます。

boost::bind(&istream::get, &cin)
于 2010-11-11T11:26:29.730 に答える
1

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;
}
于 2010-11-11T12:39:46.743 に答える