将方法传递给包含对象指针C ++的集合的所有元素

时间:2013-03-25 07:35:22

标签: c++ pointers methods set

我有一个派生自一个包含指向另一个类'对象的指针的集合的类。 基本上它看起来像这样:

class connectionSLOT: private std::set<connectionSLOT*>
{
...
};

这很简单,也许可以表示(定向)图表。我的类还包含一些简单的方法,如connect(),disconnect()等,所有这些方法都将对象指针作为参数,并且还返回这样的指针。 (即他们的声明只在他们的名字上有所不同) 例如:

connectionSLOT* connectionSLOT::connect(connectionSLOT *A)
{
  insert (A); return A;
}

或者:

connectionSLOT* connectionSLOT::disconnect(connectionSLOT *A)
{
  erase(A); return this;
}

所以,我的问题是:我怎样才能创建一个新方法,将这些函数应用于对象本身,而不是包含在集合中的所有对象(即包含在调用对象中)?

我想有这样的事情:

connectionSLOT* new_method( 'passing a method (and its argument) ' )
{
  for(it=begin();it!=end();++it) 'execute the method on (*it)' ;
  return something;
} 

它可能适用于将所有邻居点连接到某个顶点。 但是因为new_method()本身也是一个合适的函数,它也可以传递:

int main()
{
  // ... here declaring some objects and connection amongst them...

  A->new_method( new_method( disconnect(B) ) ) ;

/* calling new_method() recursively to disconnect all the vertices from B which ones are
    reachable from A in two steps */

...
}

我希望,有可能以某种方式做。 (语法基本上不重要) 提出任何建议表示赞赏。

罗伯特

1 个答案:

答案 0 :(得分:0)

你能用C ++ 11吗?我相信,std::function和lambda表达式就是你要搜索的内容。

void DoSth(std::function<void(void)> fn)
{
    fn();
}

DoSth([]() { printf("Hello, world!\n"); });

您的代码看起来更像是以下内容:

connectionSLOT::new_method(std::function<void(connectionSlot *)> fn)
{
    for (it = begin(); it != end(); ++it)
        fn(*it);

    return something;
} 

int main()
{
    // ... here declaring some objects and connection amongst them...

    A->new_method([](connectionSlot * B) { disconnect(B); } );

    // ...
}