我正在尝试使用stl算法for_each而不会在我的代码中扩散模板.std :: for_each想要按值实例化MyFunctor类,但它不能自抽象.我已经创建了一个functor适配器类,它传递一个指针,然后在适当时将其转发.
我的问题:
STL或Boost是否已经有这样的适配器类?我不想重新发明轮子!
struct MyFunctor { virtual ~MyFunctor() {} virtual void operator()(int a) = 0; } namespace { templatestruct 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); }
干杯,
戴夫
您可以使用功能适配器(及其垫片)functional
.
#includeusing namespace std; for_each( vec.begin(), vec.end(), :mem_fun_ptr( &MyClass::f ) );
如果容器包含指向对象的指针,请使用mem_fun_ptr
,否则使用mem_fun
.在这些之后,有成员函数的包装器,它们带有1个参数:mem_fun1_ptr
和mem_fun1
.
@Evan:的确,您可以使用每个对象的相同参数调用成员函数.mem_fun1
包装器的第一个参数是this
指针,第二个是成员函数参数:
for_each( vec.begin(), vec.end(), bind2nd( mem_fun_ptr( &MyClass::f ), 1 ) );
使用更多参数,自己创建循环变得更具可读性,或者创建具有表示参数的const成员变量的自定义函子.