我正在尝试使用 stl 算法 for_each 而不会在我的代码中增加模板。std::for_each 想要按值实例化 MyFunctor 类,但它不能因为它的抽象。我创建了一个仿函数适配器类,它传递一个指针,然后在适当的时候取消引用它。
我的问题:
STL 或 Boost 是否已经有这样的适配器类?我不想重新发明轮子!
struct MyFunctor {
virtual ~MyFunctor() {}
virtual void operator()(int a) = 0;
}
namespace {
template<typename FunctorType, typename OperandType> struct
FunctorAdapter
{
FunctorAdapter(FunctorType* functor) : mFunctor(functor) {}
void operator()(OperandType& subject)
{
(*mFunctor)(subject);
}
FunctorType* mFunctor;
}; }
void applyToAll(MyFunctor &f) {
FunctorHelper<MyFunctor, int> tmp(&f);
std::for_each(myvector.begin(), myvector.end(), tmp); }
干杯,
戴夫