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

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(使用前将#替换为@)

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

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • zsh 问题:在提示符附近显示最新的文件和目录以及建议的最新文件或目录

    在 MacOS Big Sur 11 3 上 这是我的 zshrc 我想获取最新的修改或创建靠近提示的文件和目录 从最新到最旧的排序 这是我当前的配置 zshrc ZSH completion autoload Uz compinit co
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 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 我的理解正确吗 为了尝试示例 我完成了以下步骤并
  • 在比较函数中使用非静态类成员

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