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

std :: for_each中的多态仿函数

如何解决《std::for_each中的多态仿函数》经验,为你挑选了1个好方法。

我正在尝试使用stl算法for_each而不会在我的代码中扩散模板.std :: for_each想要按值实例化MyFunctor类,但它不能自抽象.我已经创建了一个functor适配器类,它传递一个指针,然后在适当时将其转发.

我的问题:

STL或Boost是否已经有这样的适配器类?我不想重新发明轮子!

 struct MyFunctor  {
     virtual ~MyFunctor() {}
     virtual void operator()(int a) = 0; 
 }

 namespace {
     template struct
 FunctorAdapter
     {
         FunctorAdapter(FunctorType* functor) : mFunctor(functor) {}
         void operator()(OperandType& subject)
         {
             (*mFunctor)(subject);
         }

         FunctorType* mFunctor;
     }; }

 void applyToAll(MyFunctor &f) {
     FunctorHelper tmp(&f);
     std::for_each(myvector.begin(), myvector.end(), tmp); }

干杯,

戴夫



1> xtofl..:

您可以使用功能适配器(及其垫片)functional.

#include 

using namespace std;
for_each( vec.begin(), vec.end(), :mem_fun_ptr( &MyClass::f ) );

如果容器包含指向对象的指针,请使用mem_fun_ptr,否则使用mem_fun.在这些之后,有成员函数的包装器,它们带有1个参数:mem_fun1_ptrmem_fun1.

@Evan:的确,您可以使用每个对象的相同参数调用成员函数.mem_fun1包装器的第一个参数是this指针,第二个是成员函数参数:

for_each( vec.begin(), vec.end(), bind2nd( mem_fun_ptr( &MyClass::f ), 1 ) );

使用更多参数,自己创建循环变得更具可读性,或者创建具有表示参数的const成员变量的自定义函子.

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