gpt4 book ai didi

c++ - std::for_each 中的多态仿函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:34 26 4
gpt4 key购买 nike

我正在尝试使用 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); }

干杯,

戴夫

最佳答案

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

#include <functional>

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 成员变量的自定义仿函数变得更具可读性。

关于c++ - std::for_each 中的多态仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com