在比较函数中使用非静态类成员

2024-01-07

我目前正在开发一个语法分析器类,它需要在代码的某个点对包含运算符信息的结构进行排序。每个运算符都有一个优先级,这是用户通过我的分析器类的公共成员函数定义的。因此,在排序时,我需要排序函数根据相应运算符的优先级对元素进行排序。我使用以下代码来比较元素:

bool parser::op_comp(const op_info& o1, const op_info& o2) {
    op_def& op1 = operators[o1.op_char];
    op_def& op2 = operators[o2.op_char];

    return op1.priority > op2.priority;
}

请注意,我必须将此函数设为静态,因为它是在类内部定义的。

事实上,我的比较函数比较类型的元素op_char,然后我从包含类型元素的映射中检索运算符 defop_def,其中有一个字段“优先级”。

我面临的问题是我无法使用std::sort(ops.begin(), ops.end(), std::mem_fun_ref(&parser::op_comp))(其中 ops 是vector of op_info)方法。我收到以下错误,这听起来很合乎逻辑:

错误:在静态成员函数中无效使用成员“parser::operators”

这是我的问题:如何强制 std::sort 使用 comp 函数来利用类的非静态成员中的元素?显然该函数应该是非静态的,但如果我不使其静态,我就无法使用它......


将运算符也设为静态,然后您就可以在 op_comp 中使用它。

或者,使用仿函数而不是函数:

class myCompareClass {
  public:
  bool operator() (
    const op_info& o1, const op_info& o2) { 
    op_def& op1 = operators[o1.op_char]; 
    op_def& op2 = operators[o2.op_char]; 

    return op1.priority > op2.priority; 
  }
  private:
    ... operators ...
} myCompareObject;

std::sort(ops.begin(), ops.end(), myCompareObject) 

查看更多示例:cplusplus.com http://www.cplusplus.com/reference/algorithm/sort/

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

在比较函数中使用非静态类成员 的相关文章

  • C# 锁(mylocker) 不起作用

    我有很多 Web 服务调用 异步 在回调中 我会将结果绘制到 Excel 中 我想同步绘图方法 所以我使用以下内容 但是 从我在 Visual Studio 中追踪到 每次 lock locker 都会成功 并且有许多线程运行clearco
  • 如何通过实体键添加/删除与实体框架的多对多关系?

    I tried using Entities e new Entities EntityKey key new EntityKey Entities Users UserId 20 User user new User EntityKey
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 具有成员 std::mutex (或其他不可复制对象)的类的复制或移动构造函数?

    class A private class B private std mutex mu A parent NULL public B A const parent ptr parent parent ptr B const A B b c
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 为什么数组不可赋值? [复制]

    这个问题在这里已经有答案了 据我所知 C 标准禁止使用数组作为可修改的左值 即在赋值的左侧 int lhs 4 rhs 4 0 1 2 3 lhs rhs illegal 现在 我一直想知道为什么会这样 我可以看到上面的语句 以及写入数组的
  • MouseDoubleClick 事件不会冒泡

    我的场景经过简化 我有一个包含员工行的 ListView 在每个员工行中 都有 增加 和 减少 按钮来调整他的工资 假设在我的程序中 双击 员工 行意味着 解雇此人 The problem是当我快速单击 增加 时 这会触发 ListView
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • C 风格强制转换与内在强制转换

    假设我已经定义了 m256d x我想提取低 128 位 我会做 m128d xlow mm256 castpd256 pd128 x 然而 我最近看到有人这样做 m128d xlow m128d x 是否有用于演员的首选方法 为什么要用第一
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • C++中的虚方法表存放在哪里?

    我想知道类对象 不是实例 而是类 如何存储在内存中 class A public int a virtual void f virtual A class B public A public int b void f final overr
  • 获取RFC返回的嵌套结构的值?

    我是 C 新手 我有 rfc 它以嵌套结构的形式从 SAP 系统返回数据 但是当我使用以下方式获取该数据时 IrfcTable table rfc getTable exporting parameter et customer 它仅返回第
  • 扩展一个类

    编辑回答 虽然我最初的问题并没有完全按照康拉德 鲁道夫提供的答案所解决的方式解释我的需求 但他 无意或有意 基本上为我写了我想写的内容 类本身不会被扩展 但通过使类了解新函数来扩展其功能 这些新函数允许它 类 处理更广泛的问题 我非常感谢您
  • vs2010 c++ 通过debug查看指针内容

    我正在使用 Vs2010 c 处理 2D 数组 我从一维指针开始 并使用操作 如下 class CMatrix void clear public int nRows int nCols short MyMat CMatrix CMatri
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 在 Ubuntu 16.04 上编译 PCL 1.7,CMake 生成的 Makefile 中出现错误

    我正在尝试让 PCL 1 7 点云库 而不是其他 pcl 在 Ubuntu 16 04 上运行 我最终希望用于 C 的东西 但现在我只是想让这些例子工作 我使用的是 Ubuntu GNU 5 3 1 附带的默认编译器和 Cmake 版本 3
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • QT C++ QRegularExpression 多个匹配

    我想使用正则表达式从 QString html 中提取信息 我明确想使用正则表达式 无解析器解决方案 和类Q正则表达式 http qt project org doc qt 5 0 qtcore qregularexpression htm
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob

随机推荐

  • C++ cin 和 CTRL + Z 问题

    我正在阅读 C Primer 5th 我在练习中遇到了一些问题 从 cin 读取单词序列并将值存储为向量 后 你已经阅读了所有单词 处理向量并将每个单词更改为 大写 打印转换后的元素 一行八个字 我的代码是这样的 include
  • 循环遍历所有表并重命名列

    客户给了我一个遗留数据库old data其中包含一堆表 我将逐步在新系统中激活它们 不幸的是 有几个表包含一个名为hash它与我用来处理这个项目的 Ruby on Rails 不太兼容 有没有办法告诉MySQL控制台中的MySQL 版本8
  • JIT 自动内联的方法的大小是多少?

    我听说 JIT 自动内联小型方法 例如 getter 它们大约有 5 个字节 边界是什么 有 JVM 标志吗 HotSpot JIT 内联策略相当复杂 它涉及许多启发式方法 例如调用方方法大小 被调用方方法大小 IR 节点计数 内联深度 调
  • Zoidberg曲线,无法达到“zoidberg”解

    我正在尝试绘制在Matlab中只是为了好玩 I just copied the equation shown there and defined the sgn and theta functions but I can t achieve
  • 在一次替换调用中替换多个字符

    我需要将 的每个实例替换为空格 并将 的每个实例替换为空 空 var string Please send an information pack to the following address 我试过这个 string replace
  • 解析 XML 命名空间?

    使用 JavaScript Ajax 我正在尝试从中提取值
  • 如何在 SVG 中显示占位符图像,直到加载真实图像?

    我正在使用 D3 js 渲染包含光栅图像的节点的图形 var mainscreenURL s3 base url viewController screenshot jpeg svg select mainScreen transition
  • java中使用正则表达式进行字符串匹配

    我想像这样匹配电话号码 它应该有3 digits except 000 666以及之间的任何数字900 999后面加 然后2 digits后面加 然后4 digits 例如 123 75 3456 is a match 000 23 345
  • ruby 中的大括号与前面的字符匹配

    我在这里阅读了很多关于使用 Regexp 在 Ruby 中匹配嵌套大括号的文章 然而我无法适应我的情况 我陷入了困境 Ruby 1 9 书中使用以下内容来匹配一组嵌套大括号 A
  • DefaultSelenium 和 RemoteWebDriver 有什么区别?

    RemoteWebDriver 是 Selenium 2 0 中 DefaultSelenium 的替代品还是两者可以结合使用 RemoteWebDriver 只是用于连接到远程 selenium 服务器的驱动程序 您可以将 WebDriv
  • 忽略我对文件的更改,但不要从远程代表中删除它们

    我的工作目录中有几个文件存在于远程代表中 我总是出于特定原因更改它们 是否可以使 git 在提交时忽略这些文件 同时这些文件不应从远程代表中删除 当我从远程代表中提取更改时 不应合并这些文件 是否有可能做到这一点 P S git updat
  • 缺少“部署”按钮 Visual Studio 2012

    昨天 我已在 SharePoint 2013 开发计算机上安装了 Visual Studio 2012 Premium 我还安装了 Office 开发人员工具来获取 SP2013 项目模板 打开我的 SP 2010 解决方案文件并成功转换为
  • IPython笔记本上CSV文件的SQL语句

    我有一个tabledata csv文件和我一直在使用pandas read csv阅读或选择具有特定条件的特定列 例如 我使用以下代码来选择所有 名称 session id 1 它在数据科学家工作台上的 IPython Notebook 上
  • python list(zipobject) 返回空(列表)容器[重复]

    这个问题在这里已经有答案了 我在 Python 3 4 3 中遇到了一个奇怪的问题 而且似乎没有在任何地方提到它 可以说 a 1 2 3 4 and b 5 6 7 8 要垂直连接这些 ab zip a b 在Python 3中 ab本身会
  • React Context 未将类更新为值

    我有一个使用类实例作为上下文值的上下文 在我更新了类实例之后 这种变化不会反映在消费者身上 消费者仍然可以获得旧类别的价值 有人可以指出我如何实现这一目标的方向吗 Service class class Service name oldNa
  • Spring Cloud Zuul代理网关不从Spring Boot应用程序加载css、js

    我使用 Spring Cloud Zuul 代理创建了一个网关应用程序 网关应用程序工作正常 但它没有加载静态文件 如 img css 和 js 文件 我在我的中添加了以下设置应用程序属性我的网关应用程序的文件 zuul routes de
  • SQLAlchemy Core 和 ORM 有什么区别?

    两者的目的有什么区别SQLAlchemy 核心 http docs sqlalchemy org en latest core and SQLAlchemy ORM http docs sqlalchemy org en latest or
  • 如何将上下文菜单附加到 Chromium 浏览器

    我有一个来自 Delphi Chromium Embedded 的 TChromium broser http code google com p delphichromiumembedded 我想为其附加一个上下文菜单 我怎样才能做到这一
  • 如何在 WinUI 3 桌面中使用 Prism MVVM

    我是 WinUI 3 和 PRISM 库的新手 WinUI 3 中是否支持 PRISM 库 如果答案是 是 那么哪个图书馆是 进行初步搜索后 我看到 Prism Uno 支持 WinUI 3 我的理解正确吗 为了尝试示例 我完成了以下步骤并
  • 在比较函数中使用非静态类成员

    我目前正在开发一个语法分析器类 它需要在代码的某个点对包含运算符信息的结构进行排序 每个运算符都有一个优先级 这是用户通过我的分析器类的公共成员函数定义的 因此 在排序时 我需要排序函数根据相应运算符的优先级对元素进行排序 我使用以下代码来