gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:09 25 4
gpt4 key购买 nike

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

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

...
}

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

罗伯特

最佳答案

可以使用 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); } );

// ...
}

关于c++ - 将方法传递给包含对象指针的集合的所有元素,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609809/

25 4 0
文章推荐: Java - 从 JTextArea 检索和显示信息
文章推荐: php - 将表格行更改为链接
文章推荐: css - 通过 包含的 HTML/CSS 未正确显示