问题标签 [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 回答
801 浏览

c++ - 使用 boost.signals2 中继信号

从下面的代码中可以看出(作为问题的说明实现),我正在尝试将信号从内部类发送到中间类,中间类会将其中继到外部类。

而不是期望的结果:

运行程序时,实际发生的是:

紧随其后的是崩溃。

我已经注意到处理程序中的“this”地址与我在常规方法中所期望的地址不同,但我不知道如何解决这个问题。

我为此找到的唯一解决方案是将外部类中的信号连接到其处理程序,然后将指针(在本例中为unique_ptr)存储在内部类中,从而避免需要中继它,但感觉不到就像使用信号的安全方式一样。

我是 C++ 的新手,尤其是提升,所以我真的不知道如何以干净和安全的方式从内部类触发外部类中的回调。

0 投票
1 回答
964 浏览

c++ - C++ Boost 信号和插槽连接

我正在尝试使用提升信号和插槽将 gui 连接到我的逻辑线程,逻辑类具有将函数连接到信号的简洁方法。这是 locig 类的简化副本:

这是 gui 类的简化副本

在我的代码中的某个时刻,gui 类已经实例化,但逻辑类没有。所以我想实例化 LogicClass 并订阅GuiClass::draw_stuff(const double&)信号LogicClass::sig。就像是

不幸的是,这不起作用。不言而喻,它会非常喜欢它!

我知道 Qt 也实现了信号和插槽,但我想使用 boost 来实现与其他 UI 库的可移植性。

0 投票
1 回答
222 浏览

c++ - 将返回值转换为模板类型

我有以下模板类。

由于 R 可以是无效的,我在线得到一个无效的间接编译错误

它似乎无法通过运行时检查来解决,因为它是一个模板类。不能返回“类型”无效。我该如何解决这个问题?

0 投票
0 回答
457 浏览

c++ - boost包在vs2015中生成编译器注释

总而言之,我正在努力追查原因,以及任何可以让这些编译器注释从我的构建中得到的答案。我正在使用 VS2015,警告级别 3。由于这些是“注释”,我不确定我能做些什么来隐藏它们。一旦我将它们包括在内,它们就会开始出现,但我确信它不仅限于信号。

我将不胜感激任何帮助弄清楚这是怎么回事。

0 投票
2 回答
2395 浏览

c++ - 用 C++11 信号替换 boost-signals2

我是一名为无人驾驶车辆开发自主系统的研究程序员,我正在修改另一个项目的一些开源代码,以制作用于车辆控制的驱动程序。这个想法是拥有一个模块,该模块通常处理将特定于车辆的驱动程序加载为库的控制,现有实现使用 boost::signals2 将模块函数调用绑定到驱动程序。由于这是它目前唯一使用 boost 的东西,我想删除 boost 依赖并使用 C++ 信号,但我很难弄清楚如何做到这一点。

我一直在尝试阅读 boost::signals2 和 C++ 信号,看看我是否可以自学原理和语法:- https://en.cppreference.com/w/cpp/utility/program/信号 - https://testbit.eu/2013/cpp11-signal-system-performance - https://simmesimme.github.io/tutorials/2015/09/20/signal-slot 我认为我正在了解这些概念,但实施让我感到困惑。我发布的第一个和第二个资源使它看起来像 C++ 信号是内置在 C++11 中的,但是第三个链接中的教程似乎定义了自己的信号类,并且似乎没有使用第一个中的语法全部。

看起来其他项目之前已经这样做了(https://github.com/cinder/Cinder/issues/619),但我无法找到任何显示前后比较的具体示例 -看到一个实现通常是我点击理论到位的原因。

从驱动程序库头文件:

从驱动程序 cpp 文件中:

从模块 cpp:

驱动程序声明一个信号,它可以用来将数据发送到加载它的模块,然后该模块将该信号绑定到一个函数,以便当调用该信号并向其提供数据时,数据将转到该函数。我只是想弄清楚如何在不使用 Boost 的情况下完成同样的事情,我想这意味着弄清楚如何替换 boost::bind。非常感谢任何指向正确方向的人;我将继续努力,如果我想出其他任何事情,我会发布,以防它对将来走同样道路的人有所帮助。

0 投票
1 回答
304 浏览

c++ - boost 信号和槽不在不同的线程中工作(使用 boost::asio::io_service)

我编写了一个小型测试程序来了解signal and slotboost 提供的机制及其在不同线程中发布时的行为。我想在不同的线程中调用插槽,但是我的程序的输出显示插槽没有在发出信号的不同线程中被调用。

程序的输出是:

我怀疑post()的方法io_service无法正常工作,或者我在初始化io_service.

0 投票
0 回答
155 浏览

c++ - 如何在 Boost Signals2 中组合信号?

如何组合两个相同类型的信号?

假设我有两个信号,每个信号都有一个连接,foo并且bar.

稍后我将如何组合两个已经创建的信号以便foo包含两个插槽?

我可以使用 boost 和 C++14 或更高版本的任何东西。

0 投票
0 回答
173 浏览

c++ - 如何将成员函数连接到升压信号

有没有办法避免使用 boost::bind 将成员函数附加到 boost::signal 插槽?

我可以让它工作的唯一方法是像这样使用绑定:

但我真的希望它看起来更像这样:

这是一些示例代码,可以更好地显示它:

0 投票
1 回答
143 浏览

c++ - 使用 boost::signals2::scoped_connection 对象作为自动连接生命周期的类成员是否安全?

我想知道以下代码是否安全,因为信号可能由不同的线程触发:

编辑:添加了一个虚构的资源、析构函数和一个实现,some_action以使其更清晰。带着这个问题,我想澄清一下我的假设是否正确,即信号槽可能在 ' 析构函数之后Foo但在scoped_connection' 析构函数之前调用。为简洁起见,我省略了互斥锁保护some_resource,但是,它与问题无关。

虽然当实例被销毁时连接会被断开,但在自己的析构函数调用和's 成员的销毁Foo之间可能存在微小的差距。如果资源在被破坏后被使用,这可能会更成问题。FooFoosome_action

我应该使用普通连接并在Foo's 的析构函数中断开它们吗?将scoped_connection成员作为类的最后一个成员(应该首先被销毁)并省略任何销毁逻辑是否安全?

0 投票
1 回答
82 浏览

c++ - Boost Signals2 将 Slot 传递给成员函数以进行断开连接

我有以下使用简单的类boost::Signals2::Signal

我使用如下类:

但功能demo没有断开。输出总是:

如何正确断开功能与信号的连接?