C++ 类lambda函数pre c++;11

C++ 类lambda函数pre c++;11,c++,C++,我正在尝试编写一个有点复杂的verilator测试。我正在用verilog构建一个cpu,我想确保控制信号在某些阶段是正确的。因此,我试图编写一些代码,其工作原理如下: checkAssertion(phase=2, instruction=3766636548) 我希望能实现这一点 std::map<int, std::function<bool()>[5]> 因此,如果没有c++11,我就没有lambdas,也没有std::function。我认为这将是一种雄辩的

我正在尝试编写一个有点复杂的verilator测试。我正在用verilog构建一个cpu,我想确保控制信号在某些阶段是正确的。因此,我试图编写一些代码,其工作原理如下:

checkAssertion(phase=2, instruction=3766636548)
我希望能实现这一点

std::map<int, std::function<bool()>[5]>

因此,如果没有c++11,我就没有lambdas,也没有std::function。我认为这将是一种雄辩的方式来展示每个阶段的每个断言。在c++11

之前,我如何雄辩地做到这一点?您必须事先声明函数。假设您可以在C++03中实现一个等价于
std::function
,并打算使用本地声明的函子(基本上就是lambda)。问题是,您的
std::function
需要使用模板构造函数才能接受不同的类型(并且它们会在内部擦除该类型),而且在C++03中,您不能使用本地声明的类型作为模板参数。(忽略
函数的草率实现
)。尝试将
my_functor
的声明移动到
main()
的内部。
std::vector<std::function<bool()>> functors;
functors.push_back([&] { return read_cpu_var("phase") == 0; });
functors.push_back([&] { return (read_cpu_var("phase") == 1) && (read_cpu_var("register_read_1") == 2); });
functors.push_back([&] { return read_cpu_var("phase") == 2; });
functors.push_back([&] { return read_cpu_var("phase") == 3; });
functors.push_back([&] { return read_cpu_var("phase") == 4; });
verilator -Wall --trace -cc --vpi cpu.v --exe  -std=c++11 ../TestBenches/cpu_verify.cpp && make -j -C obj_dir -f Vcpu.mk Vcpu && obj_dir/Vcpu