当前位置:  开发笔记 > 编程语言 > 正文

在c ++中使用std :: for_each进行多态方法

如何解决《在c++中使用std::for_each进行多态方法》经验,为你挑选了1个好方法。

使用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.

谢谢,加尔



1> vava..:

它实际上是这样工作的.

#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关键字是否存在,很容易忘记它们.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有