3

使用 std::for_each 时,

class A;
vector<A*> VectorOfAPointers;

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

如果我们有从 A 继承并实现 foo() 的类,并且我们持有指向 A 的指针向量,有没有办法在 foo() 上调用多态调用,而不是显式调用 A::foo()?注意:我不能使用 boost,只能使用标准 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 回答