使用 std::tr1::function (或 boost::function)创建多播事件

2023-12-15

我正在尝试使用 TR1 的功能创建类似 C# 的多播委托和事件。或者 Boost,因为 boost::function (大部分)与 std::tr1::function 相同。作为概念证明,我尝试了以下方法:

template<typename T1>
class Event
{
private:
 typedef std::tr1::function<void (T1)> action;
 std::list<action> callbacks;

public:

 inline void operator += (action func)
 {
  callbacks.push_back(func);
 }

 inline void operator -= (action func)
 {
  callbacks.remove(func);
 }

 void operator ()(T1 arg1)
 {
  for(std::list<action>::iterator iter = callbacks.begin();
   iter != callbacks.end(); iter++)
  {
   (*iter)(arg1);
  }
 }
};

有点有效。线路callbacks.remove(func)才不是。当我编译它时,我收到以下错误:

error C2451: conditional expression of type 'void' is illegal

这是由第 1194 行引起的list标头,位于remove功能。是什么原因造成的?


如果您正在寻找 C++ 中的多播委托,那么您最好的选择是升压信号2。您还可以使用升压绑定使得可以使用成员函数进行回调。

你可以看看我的例子hereBoost.Signals 和 Boost.Bind 的简单使用。

Boost.Signal 提供生命周期管理工具,以确保事件不会发布到不再存在的订阅者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 std::tr1::function (或 boost::function)创建多播事件 的相关文章

  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • Active Directory UserPrincipal.Current.GetGroups() 返回本地组而不是 Web 服务器上的组

    以下内容在我的本地开发盒上效果很好 但是 当我将其移动到网络服务器时 它失败了 甚至不会记录错误 public static List
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • 在 try catch 块中返回到 catch 内是否不好?这是很好的做法

    在 try catch 块中从 C 中的 catch 块返回值是不好的做法吗 try Some code return 1 catch return 0 哪种使用 try catch 的方法是好的做法 不需要 只要返回的值是你想要的 你可以
  • 使用 roslyn 扩展 C# 语法

    我试图在没有 else 情况的情况下实现 return if return value if 因为我只想在条件有效时返回或返回一个值 我知道 有if condition return or if condition return value
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐

  • 四月更新后 ParallaxView 无法使用

    Windows 10 4 月更新后 ParallaxViev Control 中的视差效果不起作用 取自微软文档的示例
  • 如何将列表中的数据帧写入单个 csv 文件

    我有一个包含 15 个数据框的列表 它们看起来像这样 gt head final data 1 DateTime Unemployed Persons csv 147 2013 03 01 2320 58 148 2013 04 01 23
  • $%,.2f代表什么?

    我目前正在阅读 Deitel 关于 Java 的书 并在他们的一个程序中发现了这段代码 public String toString return String format s s n s 2f s 2f commission emplo
  • 如何查看DLL函数?

    我有一个 DLL 文件 如何查看该 DLL 中的函数 对于本机代码 最好使用依赖步行者 也可以使用dumpbinVisual Studio 附带的命令行实用程序
  • 获取 Django 中 IntegerChoices 字段的值?

    假设我有以下 Django 3 2 代码 class AType models IntegerChoices ZERO 0 Zero ONE 1 One TWO 2 Two class A models Model a type model
  • 如何找到点击的item对应的model的Id?

    如何知道我点击的item的Id 我的代码如下 function ipl mvc view openings view ipl mvc view view base extend template assets t plmt companie
  • Codeception seeInDatabase() 对我不起作用

    我真的被这个验收测试困住了 我的代码是这样的 I gt click Submit I gt see Client Added I gt seeInDatabase customers afm gt 111 一切都会过去 直到 seeInDa
  • 什么是好的唯一 PC 标识符?

    我一直在查看代码本教程 我发现它使用My Computer Name保存不应在计算机之间漫游的设置 然而 用户完全有可能拥有两台同名的电脑 例如 如果他们想在每台 PC 上使用相同的用户名 那么他们很可能最终会拥有两台名为 Username
  • 如何在 PHP 中加密/解密整数

    有没有办法对整数 或字符串 进行2路加密 解密 请注意 我不是在寻找编码 我需要这样的东西 加密 100 gt 24694 加密 101 gt 9564jh4 或 45216 或 gvhjdfT 或其他 解密 24694 gt 100 我不
  • rollapply 中的对齐和偏移

    我正在尝试计算移动窗口的一些统计数据 并在动物园包中使用 rollapply 我的问题是如何让 rollapply 将该函数应用于前 n 个观察值 而不是当前观察值和前 n 1 个观察值 就像align right 似乎所做的那样 requ
  • 具有来自多列数据帧的值计数的单列

    我想用 pandas 对多列的频率进行求和 列的数量可以在 2 15 列之间变化 以下是仅 3 列的示例 code1 code2 code3 27 5 56 534 27 78 27 312 55 89 312 27 我希望得到以下结果 c
  • C++0x 中未调用移动构造函数

    请在下面找到我的代码 我曾经调用移动构造函数 代码受其他站点启发 并让我知道它有什么问题 我正在使用 GCC 4 5 3 include
  • 递归字符串反转函数

    出于好奇编写了一个递归字符串反转函数 但是那里的 XOR 有点问题 这个函数的重点是不使用迭代器 这就是它是递归函数的原因 这不是作业 只是好奇心 private static char ReverseNL char arr int ind
  • IOError:[Errno 24]打开的文件太多:

    我有一个巨大的文件 我正在将其写入大约 450 个文件 我收到错误为too many files open 我在网上搜索并找到了一些解决方案 但没有帮助 import resource resource setrlimit resource
  • 在 ie8 及以下版本上使用 twitter bootstrap 的 Respond.js

    我正在使用 twitter bootstrap 实现一个响应式网站 但在 iexplorer 8 及更低版本上无法使用媒体查询 我为 try respond js 创建了一个简单的示例 但媒体查询在 iexplorer 7 8 上仍然无法工
  • libvirtError:XML 错误:预期单播 mac 地址,发现多播

    我正在通过 ansible 设置 KVM 自动化 并且我有一个虚拟机一直给我这个错误 libvirtError XML 错误 预期的单播 mac 地址 发现多播 53 54 00 b4 ad 81 我不认为这是一个可靠的问题 因为其他几个虚
  • 图像尺寸突然缩小

    我只是复制图像并将其保存到当前目录中的另一个临时文件夹中 没有任何修改 但图像大小以某种方式减小了 为什么 from PIL import Image import os image path Users moomoochen Deskto
  • 两个数相除总是等于零?

    在我的 Xna 游戏中 我试图将我的游戏场缩放到它运行的屏幕上 为此 我使用比例来查找实际窗口相对于我的游戏区域缩放的百分比 为此 我将实际宽度除以虚拟宽度 float percent realViewport Width this vie
  • 如何从joomla模块中的ajax获取数据库值?

    我正在创建一个模块 我想从 ajax 获取数据库值 任何人有这个问题的解决方案或任何例子请帮助我 谁能给我一个正确的方法来解决这个问题 这是我的jquery code jQuery type bind click function var
  • 使用 std::tr1::function (或 boost::function)创建多播事件

    我正在尝试使用 TR1 的功能创建类似 C 的多播委托和事件 或者 Boost 因为 boost function 大部分 与 std tr1 function 相同 作为概念证明 我尝试了以下方法 template