Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance c++;为类成员函数指定lambda函数以提高计算效率_Performance_Class_C++11_Lambda_Member Functions - Fatal编程技术网

Performance c++;为类成员函数指定lambda函数以提高计算效率

Performance c++;为类成员函数指定lambda函数以提高计算效率,performance,class,c++11,lambda,member-functions,Performance,Class,C++11,Lambda,Member Functions,更新:(重新措辞)。我希望通过将一个类成员函数的运行时赋值给多个函数中的一个,并以其他类成员为条件,来提高代码的计算效率 一种推荐的解决方案使用#include和函数,如简单测试示例所示: #include <iostream> using namespace std; struct Number { int n; function(void()) doIt; Number(int i):n(i) {}; void makeFunc() { aut

更新:(重新措辞)。我希望通过将一个类成员函数的运行时赋值给多个函数中的一个,并以其他类成员为条件,来提高代码的计算效率

一种推荐的解决方案使用
#include
函数
,如简单测试示例所示:

#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();
};
#包括
使用名称空间std;
结构编号{
int n;
函数(void())doIt;
数字(inti):n(i){};
void makeFunc(){
auto _odd=[this](){/*op特定于odd*/};
自动_偶数=[this](){/*op特定于偶数*/};
//编译但生成臃肿的代码,计算效率不高
如果(n%2)doIt=\u奇数;
否则就等于偶数;
};
};
int main(){
int i;
cin>>i;
编号e(i);
e、 makeFunc();
e、 doIt();
};

我发现编译后的代码(即调试程序集)异常复杂,可能计算效率不高(理想目标)

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

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

我建议使用

std::function<void()> doIt;

您是否尝试替换
void(*doIt)()带有
std::函数doIt?如果您有新问题,请发布新问题。这一个不能得到任何新的答案。当你说它没有效率时,你比较性能的基准代码是什么?这是一个反问句,我知道你没有。我发现编译后的代码(即调试程序集)异常复杂,可能计算效率不高。臃肿的汇编代码并不意味着效率低下;通常情况正好相反,“无法分配”-这是因为lambda的类型是不可说出的,所以不能将其分配给具有类型的对象。您需要一个执行类型擦除的构造。
void (*doIt)();