问题标签 [boost-signals]

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 投票
1 回答
653 浏览

c++ - 带有模板的 boost::signal slot_type

为以下功能构建时出现构建错误:

错误:

我相信这与它是模板化的事实有关,但我不确定如何修复它。我试过添加,这样

但这只会产生另一个错误。

0 投票
2 回答
1280 浏览

c++ - boost::signals::scoped_connection 在 std::vector 中不起作用。为什么?

据我了解,scoped_connections 旨在在超出范围时自动断开连接,而不是之前。我发现当 scoped_connection 处于其中时,这不能正常工作std::vector(并且对于其他容器也可能失败)。

例如。

我已经通过声称std::vector要求元素可复制而不可复制来解释这scoped_connection一点 - 但这并不完全正确。std::vector只要求元素是可移动的。(我希望scoped_connection应该是可移动的。)

例如,以下代码有效:

此外,如果问题是由于std::vector试图复制不可复制的东西,那不应该产生编译错误吗?

所以我想知道scoped_connection在 a 中不能正常工作的实际原因是什么vector,这是一个可以在 boost.xml 中解决的问题吗?

(我在 gcc 版本 4.8.0 和 boost 版本 1.53.0 上对此进行了测试。)

0 投票
1 回答
296 浏览

c++ - 用phoenix bind绑定一个boost信号

我正在使用 boost spirit qi 解析入站数据,然后根据其内容发送正确的功能。

boost::signals用来管理回调;我的问题是我似乎无法将 phoenix bind 与 boost 信号一起使用。

考虑以下测试用例:

这不编译,吐出一堵错误墙。

请注意,如果我将凤凰绑定线替换为

它按预期工作(但是由于程序的设计较大,这是不可能的)。

提前致谢。

0 投票
1 回答
544 浏览

c++ - 封装 boost::signal 和 boost::bind

我现在有个问题。我正在尝试将 boost::signal 和 boost::bind 封装到我自己的 Event 类中。

我尝试在订阅函数的签名中传递函数指针,而 Visual Studio 只是给了我一些错误提示。我不知道如何编写订阅的签名以及传递给 boost::bind 的内容,理想情况下我将boost::bind(&MyClass::MyHandler, &MyClassObject)在订阅功能中拥有并在外部调用它MyEventObject.Subscribe(&MyClass::MyHandler, &MyClass)。谁能帮我填补这两个空白?

0 投票
2 回答
804 浏览

c++ - 多久从 boost::signals::trackable 派生一次?

使用 Boost.Signals 时,boost 允许您派生自boost::signals::trackable,以简化对象/连接生命周期管理(请参阅boost 文档)。

我处于我的项目的早期阶段,我正在考虑,是否boost::signals::trackable

  • 我写的每一个可能在未来使用 Boost.Signals 的新类
  • 或者只有在课堂上,我确信他们将需要基本trackablee 级的功能

第一种方法的主要原因是防止我忘记从boost::signals::trackable.

还有双重推导,例如

变得不必要。

另一方面,防止内存泄漏不应该是主要的设计方面。应该使用 valgrind 等测试和分析工具来检测内存泄漏。

哪种方法更适合成长中的项目?

0 投票
2 回答
593 浏览

c++ - C++ 信号2 槽回调是否可以包含 Objective-C/C++ 类/选择器(方法)信息?

这对你们中的一些人来说一定很明显,但我找不到这样的例子:

我需要一个 boost::signals2 信号来连接作为 C++ 类成员函数或函子的槽回调,因此我可以将模型回调制作成 Objective-C/C++ 控制器代码。

该回调需要存储可以在 C++ 回调函数中调用的 Objective-C/C++ 方法实例的类和选择器。(我假设没有办法实际提供 Objective-C/C++ 方法的直接回调函数地址)。我假设我需要创建一个 C++ 类/仿函数的实例来包含用于调用 Objective-C/C++ 方法的信息。

我也不确定我是否可以分离出 Class 和 SEL(选择器)并将它们存储在 C++ 类的实例中以进行回调而不将它们作为 void* 传递。一旦 signal() 调用了 C++ 回调,我希望我可以使用 class_getInstanceMethod 和 method_getImplementation 将它们转换为可用(可调用)的形式。

此外,我可能希望将至少一个带有任意结构(“EventInfo”)的参数从信号发送到槽,它可以提供有关信号性质的信息。

任何人都可以照亮黑暗吗?

0 投票
1 回答
609 浏览

c++ - 如何将 boost::bind 与“this”指针一起使用?

下面的代码输出以下错误:

这是代码:

问题是:如何使用带有“this”指针的绑定函数?

谢谢你

0 投票
1 回答
712 浏览

c++ - 传递非托管成员函数指针以供包装器使用,以将其连接到 c++/cli 中的信号

我已经在我的托管 C++ 文件中使用 Boost::Signal 和 Boost::Bind 实现了事件处理。参考链接:Boost::bind

此外,我还在本机 C++ 文件中创建了函数指针,该函数指针作为托管代码中的 EventHandler 传递给我的 boost::Signal.Connect()。在我的 Native C++ 中作为函数指针传递的函数代码

以上函数作为 boost::function 对象在另一个函数 NameChangeEvent() 中传递,如下所示:

在上面的代码中,我采用了 boost::function 并将函数指针转换为 boost::function (f)。(我说得对吗?)。然后行 unmanagedNameEvent->AddEvent(f,name ) 其中boost::function(f)被传递给AddEvent(f,name)并且这个AddEvent(f,name)在我的托管 C++ 代码文件中实现。下面是我在本地 c++ 项目中引用的托管 C++ 代码:

//在我的 c++/CLI Wrapper.cpp

问题是我不能使用 NativeCplus 类来引用它的非托管函数(ief),因为这将创建一个 dll 文件的循环依赖关系。任何解决方法?所有的耳朵任何更短的解决方案!

0 投票
1 回答
148 浏览

boost-signals - 如何保存 boost::signal::connections 以供以后断开连接?

我想实现一个boost::signal用于回调的类。AddHandler()其他对象可以使用和RemoveHandler()方法注册它们的回调函数。

一个 SO 答案中,建议我们跟踪从boost::signal::connection返回的对象connect(),但在另一个答案中,建议我们不要!我不清楚如何管理连接。

当我connection只有slot_type

我希望来电者能够执行以下操作:

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 会有什么缺点吗?