1

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

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 */

...
}

我希望,有可能以某种方式做到。(语法基本上不重要)感谢提供任何建议。

罗伯特

4

1 回答 1

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); } );

    // ...
}
于 2013-03-25T07:37:35.197 回答