使用STL绑定多个函数参数

时间:2009-08-26 14:32:23

标签: c++ stl

过去我使用了bind1st和bind2nd函数来对STL容器进行直接操作。我现在有一个MyBase类指针的容器,为了简单起见,以下内容:

class X
{
public:
    std::string getName() const;
};

我想使用for_each调用以下静态函数,并将第1和第2个参数绑定为:

StaticFuncClass :: doSomething(ptr-> getName(),funcReturningString());

我如何使用for_each并绑定此函数的两个参数?

我正在寻找以下内容:

for_each(ctr.begin(), ctr.end(), 
         bind2Args(StaticFuncClass::doSomething(), 
                   mem_fun(&X::getName), 
                   funcReturningString());

我看到Boost提供了一个自己的绑定函数,看起来像是在这里使用的东西,但是什么是STL解决方案?

提前感谢您的回复。

3 个答案:

答案 0 :(得分:13)

当bind-syntax变得过于奇怪时,可靠的回退是定义自己的仿函数:

struct callDoSomething {
  void operator()(const X* x){
    StaticFuncClass::doSomething(x->getName(), funcReturningString());
  }
};

for_each(ctr.begin(), ctr.end(), callDoSomething());

这或多或少是bind函数在幕后所做的事情。

答案 1 :(得分:4)

“STL解决方案”是编写自己的活页夹......这就是他们创建强大的boost :: bind的原因。

答案 2 :(得分:3)

您可以创建一个本地仿函数结构,可以由编译器内联(如Jalf所示),或者使用一个简单的函数:

void myFunc( const X* x ) { 
    StaticFuncClass::doSomething(x->getName(), funcrReturningString() ); 
}

for_each( c.begin(), c.end(), myFunc );