问题标签 [boost-signals2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
778 浏览

c++ - Boost.Signals 已弃用

Boost.Signals 不再被积极维护,因此已被弃用。不要将 Boost.Signals 用于新开发(改用 Boost.Signals2)。如果您有现有的基于 Boost.Signals 的代码,它将继续工作,但请考虑迁移到 Boost.Signals2。

http://www.boost.org/users/history/version_1_54_0.html

因此,不推荐使用信号。我对此感到困惑。据我所知,Signals2 是 Signals 的多线程版本。但是如果我不需要信号的多线程使用呢?我会得到一些开销吗?我可以使用 boost::signals2::trackable 吗?在单线程应用程序中使用 Signals2 会有什么缺点吗?

0 投票
1 回答
21576 浏览

c++ - 如何以及为什么要使用 Boost 信号2?

学习 c++ 并尝试熟悉一些模式。信号2文档显然有很多我可以用槽和信号做的事情。我不明白我应该将它用于什么类型的应用程序(用例)。

我正在按照状态机调度更改事件的思路进行思考。来自动态类型的背景(C#、Java 等),您将使用事件调度程序或静态引用或回调。

c++ 中使用跨类回调有困难吗?这就是信号2存在的本质原因吗?

示例案例之一是文档/视图。这种模式比使用函数向量并在循环中调用每个函数,或者说在注册的监听类实例中调用状态更改的 lambda 更适合吗?

0 投票
1 回答
209 浏览

c++ - 如何让插槽绑定函数到信号?

我正在使用信号2。我正在尝试使用具有订阅槽的视图设置视图状态/视图关系。我似乎无法触发处理程序函数。绑定有问题吗?我是 C++ 新手,所以可能误用了 const/reference/dereferencer。

在我的状态机中:

在我看来基类:

在我看来子类:

主应用:

0 投票
1 回答
778 浏览

c++ - 增强信号:在类接口中公开信号本身或连接/断开方法?

在类中有信号时,在类“接口”中公开信号本身是否被认为是一种好习惯?

我见过有人写“注册”(可能还有“注销”)函数:

我更喜欢第一种方法,因为我不想将我班级的用户限制在我提供的功能上。但是,是否有充分的理由偏爱第二种方法?

0 投票
1 回答
2248 浏览

c++ - Boost::signals2 - 传递一个信号槽作为参数

我正在使用 boost::signals2 创建一个使用信号在特定条件下运行事件的类。这个类有一个方法叫做:RegisterCallback

此函数应采用信号使用的插槽类型的参数(返回类型为void ,精度为唯一 arg)。

但是,我不太确定应该如何在方法签名中定义该参数,因为 signal1 类的源文件对我来说非常不可读。

所以我基本上想这样做:

这是成员信号:

...这是我需要的注册方法(不完整)

0 投票
1 回答
124 浏览

c++ - clang++ 不会在 boost signals2 中构建第一个示例

大家好,我最近一直在研究增强信号,因为我想从我自己的自定义代码切换到它来处理信号通知。我从这里编译第一个示例时遇到了问题:http: //www.boost.org/doc/libs/1_53_0/doc/html/signals2/tutorial.html,这里是示例源代码:

尝试使用以下命令进行编译时出现的问题: clang++ -std=c++11 signals2example.cpp 是这里的错误:

为了缩小问题的范围,我注释掉了所有的行,直到我弄清楚是哪一行引起的,它只是简单地说“sig();”的那一行。并且问题似乎与用于元组或其他东西的 std::get 函数有关。关于 boost::signal2 和 clang++ 冲突的在线帖子并不多。我还应该注意,g++ 编译此文档时完全没有抱怨。

0 投票
0 回答
233 浏览

c++ - 通用接口,用于将模块与 boost::signals2 以及信号和插槽的未知签名连接起来

我想将一些模块与 boost::signals2 相互连接。每个模块都是某个类的对象,并且有自己的信号,例如:

信号和插槽的签名因模块而异。因此,信号的类型和时隙会有所不同。我希望模块的接口允许以通用方式连接这些模块。

我想要的是一个像 module.connect(slot) 这样的接口方法,我可以给任何插槽,如果签名符合模块信号的签名,它将插槽连接到模块的信号,或者如果签名不合适,则会出错. 或者我希望模块返回它的信号,以便插槽可以使用 signal.connect(slot) 直接连接到返回的信号。但是所有模块的信号和插槽都没有相同的类型。所以我还没有找到在接口中实现这些方法的方法。参数类型或返回类型需要根据模块的信号而变化。

由于系统应该是可扩展的,并且可以使用不同类型的信号和插槽添加新模块,因此事先不知道它们。所以硬编码类型和重载方法是不够的。

有人知道我如何实现这个接口吗?我很感谢任何建议和帮助。

0 投票
1 回答
505 浏览

c++ - boost::signal 带有来自静态成员函数的参数?

rtmidi 库需要将回调设置为静态函数,该函数应处理传入的 midi 消息。我找到了解决方法(CinderMidiIn::callback 函数),但是当我在解析后尝试发送信号时应用程序崩溃。这是代码的缩短版本:

我在编译过程中收到大量警告,并且在启动时崩溃(在第 149-150 行发送信号时)调用堆栈让我不知道从哪里开始寻找解决方案:

我已经阅读了很多关于静态函数的内容,并且我知道非静态变量无法访问静态函数,但是我仍然不知道如何将任何东西传递给信号并从静态函数中调度它。

免责声明: 最初发布在 Cinder 论坛上,带有包含完整代码的 pastebin 链接,但正如我在原始帖子顶部提到的,这更有可能是 Stack Overflow 的问题。

0 投票
1 回答
2552 浏览

c++ - 增强 Signals2 跟踪

我在我们的一个项目中使用 Boost Signals2。在此我想要自动连接管理,为此我正在测试 Boost Signals2 跟踪,但我没有调用插槽。在我运行以下代码后,不会调用插槽。环境:VS 2010,windows 7,boost 1.54

更新: *现在工作*

现在这是 Signal2 自动连接管理的完整示例

0 投票
1 回答
572 浏览

c++ - clang 不喜欢 boost::signals2?

我整天都在使用 Boost::Signals2 库从部分代码中获取编译器错误。我已经将我正在尝试做的事情减少到一个最小的例子:

当我尝试用

我得到一个模板推导错误,似乎来自信号库本身:

一段时间后,我决定放弃尝试不同编译器的疯狂想法,令我惊讶的是,如果我用

我没有错误。我正在跑步Debian clang version 3.2-7ubuntu1 (tags/RELEASE_32/final) (based on LLVM 3.2),并且g++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1;提升库 1.54。

由于项目限制,我无法使用其他编译器。有没有办法我可以坚持铿锵声并仍然使用 boost::signals2 库?