更新:(改述)。我希望通过将类成员函数的运行时分配给以其他类成员为条件的许多函数之一来提高代码的计算效率。
一个推荐的解决方案使用#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();
};
我发现编译后的代码(即调试程序集)非常复杂,并且可能没有计算效率(所需的目标)。
是否有人有一个替代构造,可以实现计算效率的最终目标,即在运行时有条件地定义类成员函数。
答案 0 :(得分:2)
捕获 lambda表达式不能像你一样分配给常规函数指针。
我建议使用
std::function<void()> doIt;
而不是
void (*doIt)();