3

std::for_each を使用する場合、

class A;
vector<A*> VectorOfAPointers;

std::for_each(VectorOfAPointers.begin(), VectorOfAPointers.end(), std::mem_fun(&A::foo));

A から継承し、foo() を実装するクラスがあり、A へのポインターのベクトルを保持している場合、明示的に A::foo() を呼び出すのではなく、foo() でポリモーフィック呼び出しを呼び出す方法はありますか? 注:ブーストは使用できません。標準のSTLのみです。

ありがとう、ギャル

4

1 に答える 1

11

実際にはこのように動作します。

#include <algorithm>
#include <iostream>
#include <functional>
#include <vector>

struct A {
    virtual void foo() {
        std::cout << "A::foo()" << std::endl;
    }
};
struct B: public A {
    virtual void foo() {
        std::cout << "B::foo()" << std::endl;
    }
};

int main()
{
    std::vector<A*> VectorOfAPointers;
    VectorOfAPointers.push_back(new B());
    std::for_each(VectorOfAPointers.begin(), VectorOfAPointers.end(), std::mem_fun(&A::foo));
    return 0;
}

版画

B::foo()

したがって、それはまさにあなたが望むことを行います。virtualただし、キーワードが存在することを確認してください。忘れがちです。

于 2009-01-20T11:27:28.497 に答える