tr1::function 可以吞掉返回值吗?

2024-03-26

boost::函数常见问题解答第 3 项 http://www.boost.org/doc/libs/1_46_1/doc/html/function/faq.html具体解决了我感兴趣的场景:

为什么有 void 的解决方法 回报? C++ 允许它们!无效退货 C++ 标准允许,如 在此代码片段中:

void f();
void g() { return f(); }

这是一个有效的用法 boost::function 因为 void 返回 没有被使用。对于无效退货,我们 会尝试编译格式错误的 代码类似于:

int f();
void g() { return f(); }

本质上,不使用 void 返回 允许 boost::function 吞下 返回值。这与 允许用户分配和调用 函数和函数对象 参数不完全匹配。

不幸的是,这在 VS2008 中不起作用:

int Foo();
std::tr1::function<void()> Bar = Foo;

这会产生以下错误:

c:\Program Files\Microsoft Visual Studio 9.0\VC\include\xxcallfun(7) : error C2562: 'std::tr1::_Callable_fun<_Ty>::_ApplyX' : 'void' function returning a value

这是 VS2008 TR1 实施的失败吗?这在VS2010中有效吗? TR1 是否解决了此功能? C++0x 怎么样?


我相信 tr1 解决了这个问题。N1836 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf(最新的 tr1 草案)说:

F 类型的函数对象 f 是 可调用参数类型 T1、T2、 ..., TN 和返回类型 R,如果给定 左值 t1, t2, ..., tNoftypesT1, T2, ..., TN, 分别调用(f, t1, t2, ..., tN) 是良构的 ([3.3]) 并且,如果 R 不是无效的,可转换为 R。

在您的示例中,R 无效,因此要求的最后一部分Callable(可转换为 R)被忽略。

然而,看起来 C++0x (C++11) 改变了规则。在 C++11 中Callable定义为INVOKE(f, t1, t2, ..., tN, R)在 [func.require] 中定义为要求INVOKE(f, t1, t2, ..., tN)可以隐式转换为 R,当 R 为 void 时也不例外。因此在 C++11 中,您的示例应该会失败。

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

tr1::function 可以吞掉返回值吗? 的相关文章

随机推荐

  • 在哪里可以找到使用 RSpec 测试 Thor 脚本的好示例?

    在哪里可以找到使用 RSpec 测试 Thor 脚本的好示例 到目前为止 我的搜索还没有找到任何好的结果 尝试 Thor 自己的存储库 https github com wycats thor tree master spec https
  • Unity 的 YUV 着色器?

    我在 Unity 中有一些 适当的 平面的 YUV 纹理 我只想看看它们供开发使用 Unity 他们的着色器语言变体 实际上有一个可用的 YUV 着色器吗 从概念上讲 从 YUV 转换为 RGB 很简单 但有点繁琐 YUV 到 RGB 转换
  • ASP.NET MVC 3 中的 OutputCache 行为

    我刚刚在 ASP NET MVC 3 的 RC 版本中测试输出缓存 不知何故 它不尊重 VaryByParam 属性 或者更确切地说 我不确定我理解发生了什么 public ActionResult View UserViewCommand
  • 如何捕获 Web 服务抛出的肥皂异常?

    我成功地在我的网络服务中抛出了一些肥皂异常 我想捕获异常并访问异常调用的字符串和 ClientFaultCode 以下是我在 Web 服务中的一个例外示例 throw new SoapException You lose the game
  • 如何根据偏航角计算方向矢量?

    我有一个问题 我不知道如何使用 Java LWJGL 计算方向向量以在 OpenGL 中渲染 我有以下系统 X 转到屏幕右侧 Z 进入我的屏幕 Y 转到屏幕顶部 高度 因此我正在XZ平面上行走 现在我想要执行 已经执行了WASD运动 并且它
  • 当我所做的只是一个列表时,为什么 Hibernate 会删除我的集合条目?

    我似乎有一个相当奇怪的问题 我在 JSP 中显示用户及其角色 由于某种原因 角色仅在第一次加载页面时显示 我刷新页面 角色全部从数据库中删除了 我的设置是标准 Spring MVC JPA Hibernate 通过 Spring Data
  • 标签发布

    是否可以仅从 a 标签 我知道锚标记通常仅用于 GET 并且我知道我可以使用 javascript 来执行此操作 例如JavaScript post 请求就像表单提交 https stackoverflow com questions 13
  • opencv错误:输入参数的大小不匹配

    我正在使用金字塔进行图像混合 我收到 opencv 错误 我正在关注官方 opencv 教程 http docs opencv org 3 0 beta doc py tutorials py tutorials html http doc
  • 确认()对话框中是/否按钮而不是确定/取消?

    In an Adobe AIR HTML JS app is it possible to display Yes No buttons instead of OK Cancel in a confirm dialog 任何可以与webki
  • Android:从HOME重新启动后保留任务的活动堆栈

    我的应用程序有两项活动 我按以下顺序开始 HOME gt A gt B 现在我按 HOME 并再次启动 A 我希望在 A 顶部看到活动 B 但我得到的是 A 因此活动堆栈被清除 显现
  • 如何使用 JavaScript / Tone.js 更改音调和播放速率?

    我想同时完成两件事 1 改变播放速率声音文件的速度为 1 2 2 降低pitch五分之一 最后 我不想使用单独的按钮来播放结果将其连接到音频标签并使用那里的播放按钮 下面是我迄今为止使用 Tone js 得到的最接近的结果 我真的很难处理文
  • 使用 jQuery 创建 HTML 元素最有效的方法是什么?

    最近我做了很多模态窗口弹出窗口之类的事情 我使用了 jQuery 我用来在页面上创建新元素的方法绝大多数是沿着以下路线 div div 但是 我感觉这不是最好或最有效的方法 从性能角度来看 在 jQuery 中创建元素的最佳方法是什么 这个
  • 具有位字段的结构中的偏移量

    如果我们有一个带有位字段的结构体 那么结构体中的后续成员如何对齐 考虑以下代码 struct A int a 1 char b at offset 1 struct B int a 16 int b 17 char c at offset
  • 如何从当前文件夹旁边的文件夹导入模块?

    我已经检查了尽可能多的页面 并尝试了我找到的所有内容 但没有一个成功 我还检查了有关导入的 PEP 页面并尝试了每个示例 但没有一个起作用 我有一个包含单元测试的测试文件夹 我需要导入我想要测试的模块 这些模块位于 src 文件夹旁边的名为
  • 子类化 datetime.timedelta 时出现奇怪的行为

    为了方便起见 我想创建 datetime timedelta 的子类 这个想法是这样定义一个类 class Hours datetime timedelta def init self hours super Hours self init
  • 如何将 SQLite 与 AngularJS 集成?

    我正在使用 google 地图 api v3 和一个名为 ng map 的插件制作一个 angularjs 应用程序 但我想将一些坐标存储在 SQLite 数据库中 然后从应用程序中检索 基本上 你不能 但是 如果您正在开发混合移动应用程序
  • MySQL 中的 CASE 性能?

    我想知道是否在 MySQL 查询中使用 CASE WHEN THEN 表达式对性能有负面影响吗 而不是使用 CASE 表达式 例如在 UPDATE 查询中 你总是有可能在你的程序中做出 if else 语句用 php python perl
  • ARM 汇编不能同时使用立即值和 ADDS/ADCS

    我目前正在尝试使用汇编来加速 Cortex M0 Freescale KL25Z 上的一些 C 函数 我遇到这个最小测试程序的问题 syntax unified cpu cortex m0 text global test code 16
  • 有没有办法在 Shiny 中构建时显示绘图,而不是等待所有绘图?

    我有一个闪亮的仪表板 里面有很多图 所有这些都需要几秒钟的时间来构建 一旦最后一个构建完成 它们就会全部显示 我希望每个图在完成后立即显示 我知道 R 是单线程的 但似乎必须有一种方法 将执行返回到显示代码 或类似的东西 这段代码演示了这个
  • tr1::function 可以吞掉返回值吗?

    boost 函数常见问题解答第 3 项 http www boost org doc libs 1 46 1 doc html function faq html具体解决了我感兴趣的场景 为什么有 void 的解决方法 回报 C 允许它们