c++ assign a class member function a lambda function for computing efficiency 计算效率
c++ assign a class member function a lambda function for computation efficiency
更新:(改写)。我希望通过将 class 成员函数的 运行 时间分配给以其他 class 成员为条件的众多函数之一来提高我的代码的计算效率。
一个推荐的解决方案使用#include <functional>
和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();
};
我发现编译后的代码(即调试程序集)异常复杂并且可能在计算上效率不高(所需的 目标 )。
是否有人有替代构造可以实现 计算效率 的最终目标,即在 运行 时间有条件地定义 class 成员函数.
捕获 lambda 表达式无法像您那样分配给常规函数指针。
我建议使用
std::function<void()> doIt;
而不是
void (*doIt)();
更新:(改写)。我希望通过将 class 成员函数的 运行 时间分配给以其他 class 成员为条件的众多函数之一来提高我的代码的计算效率。
一个推荐的解决方案使用#include <functional>
和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();
};
我发现编译后的代码(即调试程序集)异常复杂并且可能在计算上效率不高(所需的 目标 )。
是否有人有替代构造可以实现 计算效率 的最终目标,即在 运行 时间有条件地定义 class 成员函数.
捕获 lambda 表达式无法像您那样分配给常规函数指针。
我建议使用
std::function<void()> doIt;
而不是
void (*doIt)();