gpt4 book ai didi

c++ - 这种模式如何运作?

转载 作者:行者123 更新时间:2023-11-30 05:23:51 25 4
gpt4 key购买 nike

我正在阅读关于 Anthony Williams website 的博客文章当我以某种方式漫游到他的 just::thread 库的示例时,他的 barber shop example .

在其中他有一系列不继承任何东西的结构:

struct start_haircut {};
struct no_room {};
struct shop_closed {};

然后他有一个 receive他将 .match() 模板链接到的函数:

jss::actor::receive()
.match<start_haircut>(
[&](start_haircut){
//...
})
.match<no_room>(
[&](no_room){
//...
})
.match<shop_closed>(
[&](shop_closed)
{
//...
});

接收函数返回一个 unspecified_message_receiver 对象,该对象指定类型(shop_closed 等)和 lambda 处理程序。

receivematch 函数里面有什么? receivematch 函数如何交互?

这是一个有趣的模式,可以在使用它的线程模型之外应用程序。我对它在传感器之间通过 tcp 进行通信很感兴趣,其中小消息包和少量数据被连续传输。

最佳答案

这看起来(不出所料)像 Erlang。

这在您链接和引用的文档中有非常清楚的描述。

The receive function returns an unspecified_message_receiver object

所以 jss::actor::receive() 是一个 unspecified_message_receiver,

Calling match() on a receiver adds the specified MsgType to the list of handled messages, and registers the specified handler to be called when a message of that type is received.

所以

.match<start_haircut>(
[&](start_haircut){
//...
})

在先前返回的接收器中注册 lambda 以处理 start_haircut 类型的消息。
由于每个 match 都会返回一个消息接收者,您可以将它们链接起来以注册更多处理程序。

我不确定还能说些什么来澄清,但更现实的用途可能是使用某些类型来携带某种有效载荷,例如

struct start_haircut { enum { Long, Short, Shaved } style; };

jss::actor::receive()
.match<start_haircut>(
[&](start_haircut cut){
switch (cut.style)
{
case start_haircut::Long:
// ...
}
})
.match<no_room>(
[&](no_room){
//...
})
.match<shop_closed>(
[&](shop_closed)
{
//...
});

(如果您看一下 Erlang 教程,例如 "Learn you some Erlang for great good!",这种界面可能更有意义)。

关于c++ - 这种模式如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38975414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com