我有一个派生自一个包含指向另一个类'对象的指针的集合的类。 基本上它看起来像这样:
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 */
...
}
我希望,有可能以某种方式做。 (语法基本上不重要) 提出任何建议表示赞赏。
罗伯特答案 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); } );
// ...
}