使用std :: for_each时
class A; vector VectorOfAPointers; std::for_each(VectorOfAPointers.begin(), VectorOfAPointers.end(), std::mem_fun(&A::foo));
如果我们有从A继承并实现foo()的类,并且我们持有一个指向A的指针向量,有没有办法在foo()上调用多态调用,而不是显式调用A :: foo()?注意:我不能使用boost,只能使用标准STL.
谢谢,加尔
它实际上是这样工作的.
#include#include #include #include 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 VectorOfAPointers; VectorOfAPointers.push_back(new B()); std::for_each(VectorOfAPointers.begin(), VectorOfAPointers.end(), std::mem_fun(&A::foo)); return 0; }
版画
B::foo()
所以它完全符合你的要求.检查virtual
关键字是否存在,很容易忘记它们.