我有一段 C++17 代码,我想将其移植到 C++14(项目的限制)。该代码根据提供者返回的 lambda 在堆上分配一个函子。
decltype(auto) fun_provider(std::string msg)
{
return [msg](){ std::cout << msg << std::endl; };
}
int main()
{
auto fun = std::make_unique<
std::invoke_result_t<decltype(fun_provider), std::string>
>(fun_provider("Provided functor"));
(*fun.get())()
}
// output: "Provided functor"
Run Code Online (Sandbox Code Playgroud)
关键是,它避免了将 lambda 类型硬编码为std::function<void()>. 据我所知,闭包类型未指定,这种构造意味着闭包对象的不必要的副本(希望这是正确的)。
我想用 C++14 实现同样的目标,可能吗?std::result_of我用and/or尝试了一些构造,decltype但到目前为止还没有成功。
我想在 Pine64 板上部署一个简单的裸机软件,托管全志 A64 SoC。配置如下:开机时boot0启动u-boot,将my加载hello.bin到RAM( 0x40000000)并开始执行。问题是它处于 aarch32 执行状态,我想要 aarch64。
我已经找到了一种方法来做到这一点,就像在这个补丁中一样。维基上也有一些背景。
我已复制代码并objdump -d hello.o返回与链接中相同的结果:
.text 节的反汇编:
00000000 <_reset>:
0: e59f0024 ldr r0, [pc, #36] ; 2c <_reset+0x2c>
4: e59f1024 ldr r1, [pc, #36] ; 30 <_reset+0x30>
8: e5801000 str r1, [r0]
c: f57ff04f dsb sy
10: f57ff06f isb sy
14: ee1c0f50 mrc 15, 0, r0, cr12, cr0, {2}
18: e3800003 orr r0, r0, #3
1c: ee0c0f50 mcr 15, 0, r0, …Run Code Online (Sandbox Code Playgroud)