std::result_of 和 decltype 之间的区别

2023-12-24

我在理解其需求时遇到了一些困难std::result_of在 C++0x 中。如果我理解正确的话result_of用于获取使用某些类型的参数调用函数对象的结果类型。例如:

template <typename F, typename Arg>
typename std::result_of<F(Arg)>::type
invoke(F f, Arg a)
{
    return f(a);
}

我真的看不出以下代码有什么区别:

template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(f(a)) //uses the f parameter
{
    return f(a);
}

or

template <typename F, typename Arg>
auto invoke(F f, Arg a) -> decltype(F()(a)); //"constructs" an F
{
    return f(a);
}

我认为这两个解决方案的唯一问题是我们需要:

  • 有一个仿函数的实例,可以在传递给 decltype 的表达式中使用它。
  • 知道函子的定义构造函数。

我认为两者之间唯一的区别是对的吗?decltype and result_of是不是第一个需要表达式而第二个不需要?


result_of was 在Boost中引入 http://www.boost.org/doc/libs/1_42_0/boost/utility/result_of.hpp, 进而包含在 TR1 中 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1454.html,最后在 C++0x 中。所以result_of具有向后兼容的优点(使用合适的库)。

decltype是 C++0x 中的全新事物,不仅限于函数的返回类型,而且是一种语言功能。


无论如何,在 gcc 4.5 上,result_of是根据以下方面实施的decltype:

  template<typename _Signature>
    class result_of;

  template<typename _Functor, typename... _ArgTypes>
    struct result_of<_Functor(_ArgTypes...)>
    {
      typedef
        decltype( std::declval<_Functor>()(std::declval<_ArgTypes>()...) )
        type;
    };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::result_of 和 decltype 之间的区别 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • checkSelfPermission() 似乎不适用于 WRITE_EXTERNAL_STORAGE

    我有使用的应用程序
  • 如何在 Ruby on Rails 中的 ActiveRecord 查询中加入间接关联?

    在我的 Ruby on Rails 应用程序中 我有一个模型Instance属于另一个模型Zone The Zone模型本身属于Country模型 我正在获取一组Instance对象如下 scope thisweek gt joins zo
  • Facebook 登录按钮无法在 45 秒内调整大小

    我正在尝试实现异步加载 Facebook 登录按钮 但该按钮在 45 秒后消失 仅在 Google Chrome 中 并且此错误消息记录在错误控制台中 FB login button failed to re size in 45s 我该如
  • 基于一列生成单词对

    我想根据第三列 标识符 创建单词对 我的文件与此示例类似 A ID 1 B ID 2 C ID 1 D ID 1 E ID 2 F ID 3 我想要的结果是 A C ID 1 A D ID 1 B E ID 2 C D ID 1 请注意 我
  • 使用线程通过 Swift 更新 UI

    我正在使用 Swift 使用 Xcode 6 开发一个软件 当我按下按钮时 我的代码会从网络获取一些信息并将它们写入我的 NSWindow 上 所以想象一下这样的事情 IBAction func buttonPressed sender A
  • x 秒后 Symfony2 PHP 标头重定向

    我试图在 Symfony 中 x 秒后进行 PHP 标头重定向 如下所示 header refresh 5 url http www something com 我怎样才能在 Symfony2 中做到这一点 根据doc http symfo
  • websphere 7(和 Spring Roo)与 javax.el.E​​LException 不兼容

    我有一个应用程序 其前端基于 Spring Roo 1 1 2 jspx 文件 每个想法在 Tomcat 6 中都工作正常 但如果我在 Websphere 7 中部署相同的应用程序 类加载器 父级最后 则会出现异常 java lang Cl
  • 在 JFrame 中设置背景图像

    是否有任何方法可以将图像设置为背景JFrame 没有内置方法 但有几种方法可以做到这一点 目前我能想到的最直接的方法是 创建一个子类JComponent http docs oracle com javase 8 docs api java
  • 如何检查对远程 Git 存储库的写访问权限(“我可以推送吗?”)

    我正在构建一个 有些有限的 Git 客户端 要设置存储库 请输入远程存储库的 URL 我想检查用户是否对该存储库具有读 写访问权限 如果没有 我会显示一个身份验证对话框 I check 读取 访问权限 with git ls remote
  • 表单身份验证和 XmlDocument.Load

    我正在使用 C 运行一个 ASP NET Web 应用程序 使用以下内容 Windows 2003 服务器 IIS6 0 net框架2 0 50727 我正在尝试实现表单身份验证 并在 Web Config 文件中输入了以下代码
  • 无法从静态方法 Flutter 访问实例成员

    我正在尝试打电话playRefreshBar在我的代码中 但我收到这样的警告 无法从静态方法访问实例成员 这是我的静态代码 static List
  • 准备好的声明方法..困惑

    我不知道缺少什么或为什么它不显示数据 如果我不使用准备好的语句 我的代码就可以工作 当我使用准备好的语句时 代码似乎不再起作用 db php Class Database public mysqli public function cons
  • 如何在 C# 中读取 Http 响应流两次?

    我试图通过以下方式读取 Http 响应流两次 HttpWebResponse response HttpWebResponse request GetResponse stream response GetResponseStream Rs
  • “导航器”类型上不存在属性蓝牙

    我综合了示例代码 https googlechrome github io samples web bluetooth device information characteristics html进入我的 Angular 6 项目 但有一
  • 使用perl创建一个简单的计算器

    我需要用 Perl 设计一个简单的计算器 名为 ex1 pl 只需 and 功能 以下是我所拥有的 while ARGV gt 0 if m d s s d if 2 print 1 3 n elsif 2 print 1 3 n elsi
  • 在字典中查找整数最近邻

    我有一个dict需要整数键 a a 1 100 a 55 101 a 127 102 我希望在询问时能够选择最近的邻居 a 20 should return a 1 100 a 58 should return a 55 101 a 167
  • 通过 Postman 发送 CSRF 令牌

    我正在尝试使用 Postman 测试我的网络服务器的登录 首先 我向登录 URL 发送 GET 请求 并获得一个 CSRF 令牌作为 cookie 然后 我使用我的用户名 密码和 CSRF 令牌向该登录页面发出 POST 请求 我的问题是
  • 如何使用待定意图启动新活动[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 谁能告诉我如何启动一个新的Activity using PendingIntent还可以使用待定意图传递值 提前致谢 Intent inte
  • Qt - setLayout() 和 setCentralWidget()

    我最近开始使用 Qt 和 Qwt 我自己找不到自己的错误 请帮我 有代码 我知道我的错误在这里 h file class MainWindow public QMainWindow Q OBJECT QWidget centralWidge
  • std::result_of 和 decltype 之间的区别

    我在理解其需求时遇到了一些困难std result of在 C 0x 中 如果我理解正确的话result of用于获取使用某些类型的参数调用函数对象的结果类型 例如 template