显式 range-v3 decltype 计算结果为 void?

2023-12-09

我正在尝试获取范围的显式类型(将来我可能想将其存储为类中的字段)。然而,由于某种原因,它评估为void?

#include <iostream>
#include <set>
#include <range/v3/view/transform.hpp>

class Alpha {
public:
  int x;
};

class Beta : public Alpha {

};

class Foo {
public:
  std::set<Alpha*> s;

  using RangeReturn = decltype(std::declval<std::set<Alpha*>>() | ranges::v3::view::transform(std::function<Beta*(Alpha*)>()));
  RangeReturn r();
};

Foo::RangeReturn Foo::r() {
  return s | ranges::v3::view::transform([](Alpha* a) { return static_cast<Beta*>(a); });
}

int main() {
}

当使用 g++ -std=c++17 编译时,它给出

main.cpp:24:88: error: return-statement with a value, in function returning 'void' [-fpermissive]

(g++版本g++(Ubuntu 7.3.0-27ubuntu1~18.04)7.3.0)

我在 Visual Studio 2017 v. 15.9 上遇到类似的错误


这个问题是我另一个问题的延续:如何将范围存储为类中的字段?但更具体,我认为它应该分开。


您的代码不起作用,因为:

  • range/v3 视图禁用右值视图,因为这会导致悬空引用。因此在你的declval(),您还应该使用左值:

    std::declval<std::set<Alpha*>&>()
    //                           ^ here should be lvalue
    
  • 视图变换信息被编码在模板参数内。所以如果你使用view::transform(std::function<Beta*(Alpha*)>())为了表示类型,您的表达式应该具有完全相同的类型。 lambda 不行。

一个工作版本是:

class Foo {
public:
  std::set<Alpha*> s;

  using RangeReturn = decltype(std::declval<std::set<Alpha*>&>() | ranges::v3::view::transform(std::function<Beta*(Alpha*)>()));
  RangeReturn r();
};

Foo::RangeReturn Foo::r() {
  return s | ranges::v3::view::transform(std::function<Beta*(Alpha*)>{
          [](Alpha* a) { return static_cast<Beta*>(a); }
          });
}

但实际上,以这种方式存储视图并不是一个好主意。

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

显式 range-v3 decltype 计算结果为 void? 的相关文章

  • OpenSSL:RSA 加密/解密、密钥生成和密钥持久性

    我正在尝试构建一个需要以下内容的 p2p 应用程序 在 OpenSSL 中使用 RSA Encryption Decryption Generating Keys done Saving and loading keys done Savi
  • Cocoa 常量名称中的“k”代表什么[重复]

    这个问题在这里已经有答案了 可能的重复 Apple 的 API 中的 k 前缀表示什么 https stackoverflow com questions 675816 what does the k prefix indicate in
  • 寻求有关 cs50“现金”问题集的 C 贪婪算法的帮助[已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 目标是创建一种算法 该算法接受输入并给出从输入中减去值 25 10 5 1 的次数的输出 代码需要以尽可能贪婪的方式执行此操作 尽可能获取最
  • MVC 2视图显示错误的模型信息

    我在一个项目中使用 MVC 2 但我遇到了视图问题 在控制器中我有代码 return View calendarDay 如果我调试这一行并检查 calendarDay 它会告诉我 calendarDay Id 属性等于 2 在视图中我有一些
  • 嵌套绑定表达式

    这是一个后续问题我之前的问题 https stackoverflow com questions 2735294 templates function pointers and c0x include
  • Motif 库的水平绘制的 RowColumn 类 (C)?

    我正在使用 Motif Library 来完成我的工作 如果有人不熟悉这个库 您可以在这里找到文件列表https packages ubuntu com xenial amd64 libmotif dev filelist https pa
  • 带有成员 (operator[]) 函数的 invoke_result

    如何为成员函数正确调用invoke result 或者专门用于运算符成员函数 我试过std invoke result
  • C#:如何计算纵横比

    我对编程比较陌生 我需要根据给定尺寸 例如 axb 计算纵横比 16 9 或 4 3 我如何使用 C 来实现这一点 任何帮助将不胜感激 public string AspectRatio int x int y code am lookin
  • 文件已创建但无法写入

    我的计划 检查Settings txt 文件 如果该文件不存在 则创建文本并自动写入其中 如果 Settings txt 文件已存在 请忽略 不要创建或写入现有文件 我的问题 当文件不存在时 Settings txt 文件会创建 但它是空的
  • 对指针列表进行排序

    我再次发现自己在 C 中的一些非常简单的任务上失败了 有时我希望我能从 Java 中的 OO 中学到所有知识 因为我的问题通常是从像 Java 一样思考开始的 无论如何 我有一个std list
  • dotnet core 创建文件名中不含“CoreFxPipe_”的命名管道

    使用以下命令创建命名管道时命名管道客户端流 or 命名管道服务器流dotnet core 的类中 关联的 管道 看起来实际上是一个套接字 已自动将 CoreFxPipe 添加到文件名的前面 有没有一种非黑客的方法来防止这种行为 我只是希望文
  • 从高斯分布中采样随机值的最快方法是什么?

    The Box Muller 变换 http en wikipedia org wiki Box E2 80 93Muller transform 是一种从高斯分布中采样随机值的优雅且性能合理的方法 我正在寻找一种用 C 编写 清晰的更快方
  • 如何根据条件退出 PostSharp 方面的 OnEntry 方法中的方法

    我希望方面根据如下条件退出方法调用 AttributeUsage AttributeTargets Method public class IgnoreIfInactiveAttribute OnMethodBoundaryAspect p
  • 设置了 OFN_ALLOWMULTISELECT 标志的 GetOpenFileName()

    我正在尝试使用 GetOpenFileName 通用对话框调用来弹出打开对话框并允许用户选择多个文件 我设置了 OFN ALLOWMULTISELECT 标志 并设置了 OFN EXPLORER 因此我得到了 新样式 文件选择框 当我设置
  • COM Interop 挂起会冻结整个 COM 系统。如何取消COM调用

    我正在使用通过 COM Interop 包装器公开的第三方 dll 然而 其中一个 COM 调用经常冻结 至少不会返回 为了至少让我的代码更加健壮 我异步包装了调用 getDeviceInfoWaiter is a ManualResetE
  • boost::bind 会导致开销吗?

    我目前正在从事网络软件方面的工作 它有一个主要类 server这显然代表一个服务器实例 A server实例可以发送请求 并通过回调通知用户响应 代码如下 class server public typedef boost function
  • 实现多个接口的 Service Fabric Actor 接口

    我正在构建一个应用程序 其中有多个不同的参与者类型 这些参与者类型对于某些不同的数据对象具有相同类型的行为 CRUD 为了更轻松地创建处理此问题的代码 我尝试创建一个这些参与者可以实现的接口 这意味着我有一个看起来像这样的参与者界面 pub
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • Interlocked.CompareExchange 可以抛出 NullReferenceException 吗?

    From https msdn microsoft com en us library bb297966 v vs 110 aspx https msdn microsoft com en us library bb297966 v vs
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual

随机推荐

  • 使用 UISliders 值更改 UILabels 文本

    如何将 UISliders 值显示为 UILabels 文本 向滑块添加一个操作 如下所示 slider addTarget self action selector sliderChanged forControlEvents UICon
  • 如果布尔值是 null/false,如何告诉 Jackson 忽略它?

    我有课 Data public class MyClass private Boolean flag 并想将其转换为XML 但是 如果标志不为真 我需要在序列化期间忽略标志字段 So if 标志 真 我想得到
  • Selenium 中的数据提供者与 TestNG 不匹配

    我正在用 selenium 编写以下代码 并显示以下错误 请让我知道问题出在哪里 导入 org testng annotations DataProvider 导入 org testng annotations Test public cl
  • Javascript 正则表达式:如果前面有 href=" 则排除结果

    我正在努力将 Javascript 中的字符串替换为正则表达式匹配模式 我想替换 的所有匹配项 myparam 被 span 标签包围 这是可行的 参见下面的代码 但我想防止在匹配前面有 href 时进行替换 例子 href myparam
  • 使 JSP 中的 scriptlet 无效

    我试图通过在部署描述符中编写以下代码来使 scriptlet 无效 但脚本仍然被执行
  • 将字段序列化为 json

    我需要将 JSON 正文发送到 REST 服务 不幸的是 服务相当旧 我需要发送一个包含 JSON 字符串字段的 POJO 所以它看起来像这样 class SomeData int id SomePojo jsonField 所以 Some
  • Nginx 浏览器使用别名进行缓存

    我正在尝试使用 Django 在 nginx 上设置浏览器缓存 我的 nginx 配置文件的静态文件的当前 工作 配置如下 server listen 443 ssl server name SERVER ssl certificate e
  • 如何阻止从浏览器控制台访问 Firebase 实时数据库?

    我有这个 JavaScript 代码 用户可以使用他们的 Google 帐户登录我的应用程序 firebase db congifurations const config apiKey my api key authDomain my a
  • 在一行中输入用逗号分隔的 2 个变量

    可以输入2个数字吗int or float在一行中用逗号分隔 假设程序运行后会要求用户Enter a range 然后用户会输入2 3 所以变量范围是 2 3 据我所知range choice split 是唯一的办法 num1 num2
  • array:将一维数组的索引转换为多维数组的向量索引

    这将是一个很长的问题 请在阅读之前深呼吸 我想了解将一维数组的索引转换为多维数组的向量索引的最快算法是什么 让我们继续看一个例子来理解为什么我需要它 我有一个二维数组 Array i1 i2 i1 从 i1 b 0 运行到 i1 e 2 i
  • Android系统应用DEVICE_POWER权限错误

    我尝试使用goToSleep 让手机进入深度睡眠的方法 程序被安装到 system app 目录中 因此 Android 系统信息显示 它是一个系统应用程序 但如果我尝试调用 goToSleep 我会收到此错误 用户 10085 和当前进程
  • 如何在 spring-security 5.7 中配置 ldap,同时保留基本表单登录

    我正在尝试配置我的 webSecurity 以使用 ldap 和基本身份验证 jdbc 以及新的基于组件的安全配置 无 WebSecurityConfigurerAdapter 但我无法让它同时使用两者 所需的结果是 spring 第一次尝
  • Google Analytics Tracker 不适用于 Android 应用

    我已将 Google Analytics 纳入我的应用程序中 但是当我创建一个对象时Tracker追踪器不工作 我的一项活动中的代码 Override protected void onStart TODO Auto generated m
  • 如何为事件处理程序提供变量?

    当我绑定某些东西时 如何将变量赋予函数 举个简单的例子 def test self self MyTextCtrl Bind wx EVT TEXT self something AnyVariable def something self
  • 验证视图状态 MAC 失败 - “/”应用程序中的服务器错误

    当我访问我的托管 Web 应用程序时出现此错误 在 VS2008 C ASP NET 3 5 Framework 中 视图状态 MAC 验证失败 如果此应用程序由 Web Farm 或集群托管 请确保配置指定相同的validationKey
  • 覆盖 SemanticException [错误 10001]

    我想更改 hive 数据库中的 1000 个表 但其中一些表存在 有些不存在 当我执行该 sql 文件时 一旦发现表不存在 它就会从配置单元退出 所以请帮助我覆盖或跳过那些表不存在于配置单元中的查询 尝试这个配置参数 set hive cl
  • React Router V4 - 页面不会在更改的路由上重新渲染

    我正在构建一个小应用程序来学习 React 和 Meteor 要求用户输入一个位置 根据这个位置 用户被路由到一个新页面 该位置显示在页面顶部 以及基于该位置的数据库中的一些数据 还没有 这是我的 下一步 我将位置存储在组件的状态中 现在如
  • JavaScript - 如何提取 If/Else 语句中的字符串

    在搜索 imgNumber 变量后 我尝试使用 If Else 语句在屏幕上写入某些文本 由于某种原因 无论 imgNumber 变量中包含哪个文本 它都只写入字符串 cockroaches 此外 imgNumber 是一个随机字符串 它始
  • scala 中的闭包是如何实现的?

    创建函数时 如何将函数范围之外的变量拉入函数中 我尝试反编译 但我无法理解它 看起来它使用了 putfield putfield 是否创建一个指向对象引用的指针 答案是 这取决于 scala 2 11 版本可能会对此进行一些重大更改 希望
  • 显式 range-v3 decltype 计算结果为 void?

    我正在尝试获取范围的显式类型 将来我可能想将其存储为类中的字段 然而 由于某种原因 它评估为void include