0

私は C++ と STL にまったく慣れていません。ここで私が理解できないことがあります:

class Foo
{
public:
    void operator()(int& bar) { std::cout << bar << std::endl; }
};

int main(int ac, char* av[])
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    std::for_each(v.begin(), v.end(), Foo); // Invalid argument Foo

    Foo foo;
    std::for_each(v.begin(), v.end(), foo); // Valid argument foo

    return 0;
}

最初の試行で無効な引数エラーが発生するのはなぜですか? どうもありがとうございました!

4

3 に答える 3

5

Fooはクラス (つまり) であるのに対し、fooはインスタンス (つまりオブジェクト) であるためです。 for_each()操作するオブジェクトを取ります。

C++ では、型はファーストクラスではないことに注意してください。関数などに渡すことはできません (ただし、関数テンプレートのパラメーターとして使用できます)。

于 2013-06-18T12:03:38.670 に答える
2

std::for_eachクラスの代わりにオブジェクトが必要だからです。Fooは単なるタイプです。

あなたのコードはこれと同等です:

int foo;
std::for_each(v.begin(), v.end(), int); // the third parameter is incorrect, it must be "foo"
于 2013-06-18T12:05:30.650 に答える