C++为类成员函数分配一个lambda函数以提高计算效率[重复]

2023-12-12

更新:(改写)。我希望通过将类成员函数的运行时分配给以其他类成员为条件的许多函数之一来提高代码的计算效率。

一种推荐的解决方案使用#include <functional> and function<void()>,如简单的测试示例所示:

#include <iostream>
using namespace std;

struct Number {
  int n;
  function(void()) doIt;

  Number(int i):n(i) {};

  void makeFunc() {

      auto _odd  = [this]() { /* op specific to odd */ };
      auto _even = [this]() { /* op specific to even */ };

    // compiles but produces bloated code, not computatinally efficient
      if (n%2) doIt = _odd;   
      else     doIt = _even;  
  };
};

int main() {
  int i;
  cin >> i;
  Number e(i);
  e.makeFunc();
  e.doIt();
};

我发现编译的代码(即调试程序集)非常复杂,并且可能计算效率不高(所需的goal).

是否有人有一种替代结构可以实现最终目标计算效率高在运行时有条件地定义类成员函数的方法。


A 捕获lambda 表达式不能像您一样分配给常规函数指针。

我建议使用

std::function<void()> doIt;

代替

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

C++为类成员函数分配一个lambda函数以提高计算效率[重复] 的相关文章

随机推荐

  • Meteor 账户-twitter 无法使用

    我一直在尝试Meteor 我想使用 OAuth 对我网站上的用户进行身份验证 因为我不想自己实现登录功能 目前我的网站非常简单 计数器 单击按钮计数器就会加一 当用户转到另一台机器并登录其计数时 这个想法就会被保留 我已按照以下步骤操作流星
  • 带客户端身份验证的 SSL 套接字连接

    我有一个运行一些实用命令的应用程序服务器 它是用 C 编程的 我必须使用 Java SSL 套接字通过 Java 客户端程序连接到服务器 客户端身份验证 服务器端的密钥是使用以下命令创建的 openssl req new text out
  • R studio安装包错误无法移动00LOCK权限被拒绝

    我正在尝试安装rlang封装使用Rstudio但我收到此错误 mv cannot move usr local lib R site library rlang to usr local lib R site library 00LOCK
  • 为什么 Appbase 在返回正确的项目之前返回“未定义”?

    我正在使用 AppBase io 作为数据库 我不明白为什么这个组件在获取项目后渲染两次 看起来 AppBase 数据库 返回了不明确的第一个和正确的项目然后 有人知道为什么吗 查看示例 其中我得到 2 个日志 在这个组件中 我需要从数据库
  • 扩展 AS3 的数组访问运算符以“包装”越界索引值

    我真的很希望能够使 Flash 的数组访问语法 环绕 数组的边界 冗长的解释 var array Array a b c d e f 为了简单起见 第一个索引是 0 其值是第一个字母 a 为了获得这个值 我们会这样做 array 0 ret
  • 如何读取 HttpServletReponses 输出流?

    我想制作一个 Servlet 过滤器 它将在处理和完成后读取响应的内容 并以 XML 或 PDF 或其他形式返回该信息 但我不确定如何从 HttpServletResponse 对象中获取任何信息 我怎样才能得到这些信息 将其添加到过滤器
  • Xgboost 未与校准分类器一起运行

    我正在尝试使用校准的分类器运行 XGboost 下面是我遇到错误的代码片段 from sklearn calibration import CalibratedClassifierCV from xgboost import XGBClas
  • Android OpenSSL 应用程序拒绝问题

    经过大量研究后 我仍然无法弄清楚我的应用程序的哪一部分使用了 Google 不接受的 OpenSSL 查询以下命令后 我收到的输出为 unzip p MyApp apk strings grep OpenSSL GmsCore OpenSS
  • 如何展开递推式:T(n)=2T((n+2)/3)

    我正在尝试解决这个复发问题 但我不知道如何展开它 T n 2T n 2 3 1 我可以忽略 2 并将其解为 2T n 3 1 吗 这来自一个使用V a b 数组并返回 return V X f V a Y f V Z b Where Y i
  • UIModalTransitionStylePartialCurl 半页

    我通过以下方式显示 UIViewController MyViewController myVc MyViewController alloc initWithNibName MyViewController bundle nil myVc
  • 为什么 libc 有两个版本号(在 Ubuntu 上)?

    如果我在 Docker 中运行这个ubuntu latest root 4304dfbfa661 ls lib x86 64 linux gnu libc l rwxr xr x 1 root root 1868984 Jan 15 02
  • 如何在透视投影场景中使用面法线进行背面剔除

    我正在用 C 编写低级 2D 3D 渲染引擎作为 MCU 平台显示驱动程序的一部分 但我在 3D 透视投影和面部剔除方面遇到了困难 假设我的 3D 引擎正在使用M V P矩阵 与 OpenGL 固定管道中的模型 视图和投影矩阵相同 这个想法
  • 如何定义由其他数据类型组成的数据类型?

    我想定义数据类型Currency 它由其他三种数据类型组成 我遇到的问题是 Haskell 无法将数据类型识别为货币的一部分 这会破坏一切 我的想法是将不同的货币定义为它们自己的数据类型 然后将它们添加到货币类型中 我尝试过 data Eu
  • RecyclerView 中的选定项目在滚动时发生变化

    我有一个 RecyclerView 其中每个元素代表一个事件 我想让用户通过单击来选择事件 选择后 事件和报告按钮将被着色 执行单击之前的 UI 点击这里 UI 执行单击后 点击这里 这非常简单并且据称有效 我设置了一个OnClickLis
  • Firebase 与 Swift 3 计算儿童数量

    我有一个字符串数组 我正在尝试通过 firebase 填充它 它是一个聊天应用程序 当用户创建房间时 他或她会为该房间命名 当用户登录并进入登陆页面时 它会查询他或她正在参与的所有房间 我希望它填充表格视图 在 firebase 文档中 我
  • javascript onclick create(element) div viz 弹出框

    我正在尝试制作一个弹出框 单击按钮即可调用该弹出框 这就是我到目前为止所得到的 http jsfiddle net WGPhG 2 这是一个真正可以做你想做的事情的小提琴 http jsfiddle net WGPhG 6 JS funct
  • PrimeFaces 验证器未触发

    由于 fileLimit 不再存在于 primefaces 3 4 中 我正在尝试解决实现验证器的问题 问题是方法 validate 从未被调用 这是我的验证器 FacesValidator value fileLimitValidator
  • 需要帮助使用 C++ 在 Linux 环境中的现有应用程序中生成击键

    我需要帮助在 LINUX 环境中的现有应用程序中生成击键 我完全知道 Dev C 中有一些库可以完全满足我的需求 但在 Windows 中 我需要在 Linux 中实现类似的功能 我用谷歌搜索了很多 但找不到任何解决方案 下面是 Dev C
  • .htaccess 重写 url 并删除 .php

    我想通过 htaccess 文件从 url 中删除 php 例如home php to home我在 htaccess 文件中使用以下重写规则 RewriteRule 1 php L 我还想重写网址 例如 detail php ca 38
  • C++为类成员函数分配一个lambda函数以提高计算效率[重复]

    这个问题在这里已经有答案了 更新 改写 我希望通过将类成员函数的运行时分配给以其他类成员为条件的许多函数之一来提高代码的计算效率 一种推荐的解决方案使用 include