问题标签 [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.
c++ - 通过函子断开升压信号2连接
我正在尝试将一些使用不同系统的代码转换为使用 Boost.Signals2。旧代码使用常规函数指针作为函子;连接是通过使用函子调用特定方法来完成的,而断开连接是通过使用完全相同的函子调用另一个方法来完成的。出于兼容性原因,我仍然希望支持这一点,即使我知道这不是 Signals2 下最有效的方法。
上面的(简化的)代码可以很好地连接,但是 Unregister 方法在 VS2008 中不能编译:
那么,不知何故,函数对象不能与自身进行比较?我还尝试将 slot_function_type 用于 UpdateCallback,并明确将其指定为具有相同签名的 boost::function;这两个都产生了这个错误:
所以我想它已经从选择太少变成了太多。我该如何解决这个问题?
c++ - C ++模板参数推导不起作用
我需要覆盖 和 之间的boost::signals2::signal
连接boost::function
。为此,我创建了以下模板函数:
我想bind
尽可能简单地使用它。从我在类似问题的帖子中读到的内容,模板参数应该从函数参数中推导出来。但在我的情况下,当没有明确的参数时它不起作用。
我错过了什么吗?
是否有任何解决方法可以避免显式模板参数?
c++ - 如何使用通用功能/插槽连接到 boost::signal?
是否可以将具有不同签名的函数连接到需要某个签名的 Boost::Signal ?
我有许多信号(具有不同的签名)并且从该模块外部我希望能够在不关心信号签名的情况下观察信号。甚至可能吗?
例子:
是否可以使用 Boost::Bind 来做到这一点?
使用的升压版本:1.46.1
如果我使用
我收到以下错误:
非常感谢你们。
boost - 如何在 c++ 模板中使用 boost::is_same 以及 boost::lambda::bind
我正在尝试将泛型连接boost::function<void(void)>
到许多不同签名的 boost::signals2 。我可以使用 boot::lambda::bind 通过将返回值作为绑定参数的一部分传递来执行绑定部分,但是当返回类型为 void 时会出现问题
例子:
我不断收到编译错误
从错误中可以看出,带有 boost::is_void 的 if 条件(boost::is_same 也不是)似乎不起作用,有人知道为什么吗?有没有更好的方法来做这个绑定?
谢谢,萨克
boost - 这个 boost::lambda::bind 用法有什么问题?
这段代码有问题吗?我不断收到编译错误。基本上我想将一个 void 返回函数连接到一个具有非 void 返回类型的信号。增强版:1.46.1 版
编译时出现以下错误:
谢谢。
c++ - Boost bootstrap.bat 在我的 DOS cmd 行中崩溃
我复制了一位同事的 boost 目录。它开箱即用,运行良好。
但是现在我遇到了一个问题,我有一些使用 boost.signals 的新代码可以很好地编译但没有链接,因为我的 bin 目录中没有该libboost_signals-vc100-mt-gd-1_48.lib
文件。(我已经有线程、正则表达式和其他一些库二进制文件,但没有信号)。
所以我已经开始研究Boost Install 程序以构建 Boost.Signals2
并且无论我想安装 Boost.Build 还是构建 Boost.Signals2,批处理脚本bootstraps.bat都会使我的 MS-DOS 命令窗口崩溃而没有错误消息。写完“Bootstraping the build engine”或“Bootstraping Boost.Build engine”后,大约需要10秒。
或者
我不知道从哪里开始调查?任何想法 ?我忘记了一些明显的事情吗?
c++ - Boost Signal2 的 Visual Studio 2012 C++ 编译错误
我正在使用带有以下 Boost Signals2 代码的 Visual Studio 2012 Ultimate:在https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp 它会生成以下错误:
此代码与 Visual Studio 2012 C++ 不兼容吗?仍然可以安全使用吗?最后,如何按照建议进行更改?谢谢
signals-slots - 将皮下注射与 Boost.Signals2 结合使用
为了将 Boost.Signals2 与 Hypodermic 一起使用,我将如何连接插槽?我会将连接代码放在 OnActivating 块中吗?
即使 Hypodermic 是用 Signals2 构建的,我是否认为它们并没有重复彼此的功能?
c++ - Boost::signals2 - 用槽解构对象
考虑一下:
输出是“插槽调用!” 并且没有崩溃或任何事情。这就是为什么我有几个问题:
1)为什么没有崩溃?
2)为什么即使槽函数将某些东西分配给不存在的对象,也没有崩溃?
3)如何使信号自动跟踪其插槽的生命周期?我的意思是当插槽被破坏时,它会断开连接。
第 3 个问题是最重要的,因为我需要实现观察者模式,并且观察者(插槽)的生命周期通常不会是静态的(在应用程序运行的整个时间内)。
c++ - 在析构函数期间提升信号导致 sigabrt
我开始使用 boost::signals2 跟踪对象破坏。我写了一个小测试,看看我是否仍然可以在析构函数中使用信号。它似乎奏效了。然后我开始使用它来跟踪引用其他对象的对象列表。我的结构或多或少是这样的:
结构简图:http: //oi50.tinypic.com/16c8cwn.jpg
我有两个类 IModel 和 IBlock。IModel 有许多 IBlock,一个 IBlock 有一个 IModel 父级。但是,有一个特殊的 IBlock,称为 IModelBlock。除了其父模块外,此模块还有一个引用的 IModel。这是 IModel 之间的“连接器”。我想让 IModel 知道哪些 IModel 正在使用它们,所以我实现了一个引用计数系统,该系统使用在 IModel 和 IBlock 销毁期间发生的信号来跟踪哪些模型正在使用另一个模型。
我有我的 IBlock 纯虚拟类(显然除了析构函数):
我的 IModelBlock 标头(纯虚拟类):
我的 IModel 标头(纯虚拟类):
我对 IModelBlock 构造函数(ModelBlock 类)的实现,它通知模型它正在被使用:
这是毛茸茸的地方
我的 IModel (Model) 实现定义了以下内容:
这是发生的事情
当我使用 ModelBlocks 创建一堆带有嵌套模型的模型时,每件事都工作得很好。然而,我预料到破坏会出现一些问题,所以我为一个巨大的段错误做好了准备……这从未发生过。相反,当我让所有模型(及其所有块)开始销毁阶段时,我得到了一个 sigabrt,它说它发生在Model::onModelBlockDestroying
第一个if
. 我看着控制台,它说pure virtual method called
。我以前从未见过这个错误,所以我不确定如何修复它。
堆栈跟踪显示它正在调用 ~IBlock 析构函数并发出sigBlockDestroying
信号,在 10 个函数级别后最终调用该onModelBlockDestroying
函数。现在,如果模型被销毁,它的所有信号都应该被断开(参见~Model
参考资料),我会认为 sigBlockDestroying 不会调用任何东西。因此,我可以得出结论,当调用 ~IBlock 析构函数时,模型仍然存在,并且对象仍然有效。我 99.9% 肯定我在这个假设中是错误的,因为显然存在问题,但我不确定它为什么会发生或如何解决它。我知道上面有很多代码,但是有人知道我哪里出错了吗?
编辑:我感觉它与调用传入的 IBlock* 的成员函数有关onModelBlockDestroying
,但该对象还没有消失(除非,因为它已经通过析构函数进行实际实现,它只剩下用纯虚来调用)。这就是正在发生的事情吗?因为析构函数在 ~IBlock 中,当它在树下很远时,它已经调用了 ~ModelBlock 的析构函数,所以所有实现的函数都不再可访问?
如果我解释得不够好,请告诉我,我会澄清。